Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2009, 19:05   #1
Laplas
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 25
По умолчанию краевая задача диф.уравнения методом стрельбы

добрый вечер!!! нужно численно решить диф.уравнение методом стрельбы:
y"=y+2*x;
краевые условия
y(0)=0;
y(1)=-1;
я сделал так:
Код:
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
#include "conio.h"

const int n = 1000;

double func2(double x, double y, double z)
{
 	return 2*x+y;
}
double func1(double x, double y, double z)
{ 
	return z;
}
double RK (double x, double y, double z, double a, double b)
{ 
	double k1, k2, k3, k4,l1,l2,l3,l4, h;
	int i;
		h=(b-a)/n;
	FILE *f;
f=fopen ("1.txt", "w");

		for (i=1; i<n; i++)
		{x=i*h;
		k1=h*func1(x,y,z); 
		l1=h*func2(x,y,z);
		k2=h*func1(x+h/2,y+k1/2,z+l1/2);
		l2=h*func2(x+h/2,y+k1/2,z+l1/2);
		k3=h*func1(x+h/2,y+k2/2,z+l2/2);
		l3=h*func2(x+h/2,y+k2/2,z+l2/2);
		k4=h*func1(x+h,y+k3,z+l3);
		l4=h*func2(x+h,y+k3,z+l3);
		y+=(k1+2*k2+2*k3+k4)*h/6;
		z+=(l1+2*l2+2*l3+l4)*h/6;
		fprintf (f,"%lf\t%lf\t%lf\n",x,y,z);
		}
	fclose (f);
	return y;
}
int _tmain(int argc, _TCHAR* argv[])
{double a=0, b=1, ya=0, yb=-1, z0,z1, Fz0, dFz0, eps=0.001, delta;
 scanf ("%lf",&z0);
	do 
		{
		Fz0=yb-RK(a,ya,z0,a,b);
		dFz0=(RK(a,ya,(z0+eps),a,b)-yb-Fz0)/eps;
		z1=z0+Fz0/dFz0;
		delta=fabs(z1-z0);
		z0=z1;
		}
	while (delta>eps);
    getch();
	return 0;
}
но она почему неправильно считает z=y'(x),
посмотрите пожалуйста, может я ошибся где то????))))
спасибо))
Laplas вне форума Ответить с цитированием
Старый 26.12.2009, 19:40   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

В методе понимаю мало, но смотря на Вашу программу хочу спросить зачем нужна эта функция?
Код:
double func1(double x, double y, double z)
{ 
	return z;
}
Не обижайтесь. Может отвечая на мои глупые вопросы сможете найти ошибку.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 26.12.2009, 23:56   #3
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Код:
dFz0=(RK(a,ya,(z0+eps),a,b)-yb-Fz0)/eps;
Здесь ошибка.
Serebro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить корень уравнения методом Ньютона VNS Помощь студентам 0 02.12.2009 14:35
краевая задача. Laplas Общие вопросы C/C++ 1 03.11.2009 11:58
Решение уравнения методом деления отрезка пополам. Методом секущей. Panda196 Паскаль, Turbo Pascal, PascalABC.NET 3 25.11.2008 09:06
Решение системы диф уранений методом Эйлера Richi Microsoft Office Excel 5 13.05.2008 11:36
Задача на оценку эффективности стрельбы Борзов Помощь студентам 3 23.05.2007 06:54