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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Promo-V
Сообщений: n/a
#1

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

19.03.2009, 19:00. Просмотров 1559. Ответов 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++
Проинтегрировать дифференциальное уравнение y‘ = ху + 2 на отрезке 0 &lt; х &lt; 1 при у(0) = 0,5. Условие задачи....

дифференциальное уравнение движения - C++
Задание: Составить дифференциальное уравнение движения ракеты и определить её начальную скорость относительно самолёта, которая...

Методом Эйлера решить дифференциальное уравнение - C++
кодеры есть? методом эйлера решить диф уравнение я знаю код есть везде, но я щас в плохом состоянии чтобы искать у кого выйдет...

Отрезок [a,b] разбить на n частей, каждую часть проинтегрировать - C++
Написать программу на С++ отрезок разбить на n частей каждую часть про интегрировать! Помогите пожалуйста!!!!!!!!!!!

Отрезок разбить на n частей, каждую часть проинтегрировать, либо методом трапеции - C++
1)Вписать простую функцию sin^2(П/2*x) 2)на разбить на n частей каждую часть проинтегрировать либо методом трапеции; либо гаусс по 16...

Дано уравнение ax2+bx+c=0. Решить уравнение, результат вывести на экран. - C++
Здравствуйте. Завтра зачет, нужно сдать две программы на с++, как их писать у меня весьма смутное представление. Собственно задание: ...

Создать производные классы линейное уравнение и квадратное уравнение, в которых данная функция переопределена - C++
Создать абстрактный базовый класс уравнение с виртуальной функцией - корни уравнения. Создать производные классы линейное уравнение и...

18. Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клави - C++
#include &lt;iostream&gt; using namespace std; void main() { int urov1 = 0; int urov2 = 0; int urov3 = 0; float stad = 0; ...

Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клавиатур - C++
Заупутался :-(

Дифференциальное уравнений методом Гюна - C++
Задано: f(x,y)= sqrt(pow(y,2)+pow(x,2)) y0= 0.4 Найти решение методом ГЮНА помогите


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yurii_74
paladin
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     Проинтегрировать дифференциальное уравнение
Ответ Создать тему
Опции темы

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