Форум программистов, компьютерный форум CyberForum.ru

Проинтегрировать дифференциальное уравнение - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Promo-V
Сообщений: n/a
19.03.2009, 19:00     Проинтегрировать дифференциальное уравнение #1
Задание
Проинтегрировать дифференциальное уравнение:
на отрезке 0<=x<=2 при y (0)=1.
Уравнение
y'=sqrt(y^2+y-1)
Он почему-то выдает при y(0) выдает 1.231 а не 1.000 как при условии помогите пожалуйста!!!
использовал метод решения уравнения Рунге-Кутта:

Наработка:
#include "stdio.h"
#include "conio.h"
#include "math.h"
void main()
{
float h,a = 0,b = 2;
int n = 10;
float dif(float b,float h);
clrscr();
printf("| x | y |\n");
printf("|------|-------|\n");
h = (b - a) / n;
dif(b,h);
getch();
}

float dif(float b, float h)
{
float y,x,k1,k2,k3,k4;
float f(float x, float y);
for (y=1, x <= 0; x <= 2.2; x += h)
{
k1 = h * f(x,y);
k2 = h * f((x + h / 2),(y + k1 / 2));
k3 = h * f((x + h / 2),(y + k2 / 2));
k4 = h * f((x + h),(y + k3));
y += (k1 + 2*k2 + 2*k3 + k4) / 6;
if (y < 10)
{
printf("| %5.3f| %5.3f |\n",x,y);
printf("|------|-------|\n");
}
else
{
printf("| %5.3f| %5.3f|\n",x,y);
printf("|------|-------|\n");
}
}
return y;
}
float f(float x, float y)
{
return sqrt(y*y+y-1);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2009, 19:00     Проинтегрировать дифференциальное уравнение
Посмотрите здесь:

Проинтегрировать дифференциальное уравнение C++
C++ Методом Эйлера решить дифференциальное уравнение
Уравнение C++
уравнение C++
C++ Уравнение
C++ Уравнение
C++ Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клавиатур
C++ 18. Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клави
Отрезок разбить на n частей, каждую часть проинтегрировать, либо методом трапеции C++
Отрезок [a,b] разбить на n частей, каждую часть проинтегрировать C++
Дифференциальное уравнений методом Гюна C++
C++ дифференциальное уравнение движения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yurii_74
paladin
 Аватар для Yurii_74
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
20.03.2009, 08:31     Проинтегрировать дифференциальное уравнение #2
1) не лучше ли dif задать так:
float dif (float a, float b, float h);
?

2) цикл немного подправить:
for (y = 1, x = a; x< b + h; x+=h)

3) выводить y для нужного x:
то есть перенести эту часть
Код
printf("| %5.3f| %5.3f |\n",x,y);
printf("|------|-------|\n");
выше вот этой:
Код
k1 = h * f(x,y);
k2 = h * f((x + h / 2),(y + k1 / 2));
k3 = h * f((x + h / 2),(y + k2 / 2));
k4 = h * f((x + h),(y + k3));
y += (k1 + 2*k2 + 2*k3 + k4) / 6;
И немного не понял смысл сего участка:
Код
if (y < 10)
{
printf("| %5.3f| %5.3f |\n",x,y);
printf("|------|-------|\n");
}
else
{
printf("| %5.3f| %5.3f|\n",x,y);
printf("|------|-------|\n");
}
Yandex
Объявления
20.03.2009, 08:31     Проинтегрировать дифференциальное уравнение
Ответ Создать тему
Опции темы

Текущее время: 21:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru