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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2009, 14:01   #1
progressist
 
Регистрация: 24.06.2009
Сообщений: 3
По умолчанию Решение системы дифуравнений на С++

Поясните почему программа не работает, не выдает просчитанные значения)))
Код:
#include <stdio.h>
#include <math.h>
#include <iostream>

using namespace std;
double result[2];

double f(int i,double y[2]){
switch (i){
    case 1:

return cos(y[2]);break;
case 2:

 return (sin(y[1])+cos(y[2])*2);break;
default : break;
}
}
double step(double t,double h,int n,double y[2])
{
int i=0;

double yt[2];
double k1[2];
double k2[2];
double k3[2];
double k4[2];

for(i = 1; i <= n; i++)
{
k1[i] = h*f(i,y);
}
for(i = 1; i <= n; i++)
{
yt[i] = y[i]+0.5*k1[i];
}
for(i = 1; i <= n; i++)
{
k2[i] = h*f(i,  yt);
}
for(i = 1; i <= n; i++)
{
yt[i] = y[i]+0.5*k2[i];
}
for(i = 1; i <= n; i++)
{
k3[i] = h*f(i,  yt);
}
for(i = 1; i <= n; i++)
{
yt[i] = y[i]+k3[i];
}
for(i = 1; i <= n; i++)
{
k4[i] = h*f(i,  yt);
}
for(i = 1; i <= n; i++)
{
y[i] = y[i]+(k1[i]+2.0*k2[i]+2.0*k3[i]+k4[i])/6.0;
result[i]=y[i];
}


}
void solvesystemrungekutta(double t,double t1,int steps,double result[2]){

for(int i = 1; i <= steps-1; i++)
{
step(t+i*(t1-t)/steps, (t1-t)/steps,2, result);
cout<<result[2];
}
}

int main(){
//первая координата
double temporaryresult[2];
solvesystemrungekutta(1,100,500,temporaryresult);





return 0;
}
progressist вне форума Ответить с цитированием
Старый 30.06.2009, 14:23   #2
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

Во-первых я не вижу, чтобы step что-то возвращал... Во-вторых, что вы выводите в solvesystemrungekutta? result - массив от 2 элементов, а вы выводите третий, которого нет.
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 30.06.2009, 15:34   #3
progressist
 
Регистрация: 24.06.2009
Сообщений: 3
По умолчанию

подправил, но все равно не работает

Код:
#include <stdio.h>
#include <math.h>
#include <iostream>

using namespace std;


double f(int i,double y[2]){
switch (i){
    case 0:

return cos(y[0]);break;
case 1:

 return (sin(y[1])+cos(y[0])*2);break;
default : break;
}
}
double step(double h,int n,double y[2])
{
int i=0;

double yt[2];
double k1[2];
double k2[2];
double k3[2];
double k4[2];

for(i = 1; i <= n; i++)
{
k1[i] = h*f(i,y);
}
for(i = 1; i <= n; i++)
{
yt[i] = y[i]+0.5*k1[i];
}
for(i = 1; i <= n; i++)
{
k2[i] = h*f(i,  yt);
}
for(i = 1; i <= n; i++)
{
yt[i] = y[i]+0.5*k2[i];
}
for(i = 1; i <= n; i++)
{
k3[i] = h*f(i,  yt);
}
for(i = 1; i <= n; i++)
{
yt[i] = y[i]+k3[i];
}
for(i = 1; i <= n; i++)
{
k4[i] = h*f(i,  yt);
}
for(i = 1; i <= n; i++)
{
y[i] = y[i]+(k1[i]+2.0*k2[i]+2.0*k3[i]+k4[i])/6.0;
return y[i];
}


}
void solvesystemrungekutta(double t,double t1,int steps,double y[2]){

for(int i = 1; i <= steps-1; i++)
{
step((t1-t)/steps,2, y);
cout<<y[1];
}
}

int main(){
//первая координата
double temporaryresult[2];
solvesystemrungekutta(1,100,500,temporaryresult);





return 0;
}
progressist вне форума Ответить с цитированием
Старый 30.06.2009, 17:07   #4
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

передавай указатель на массив и размерность в функцию
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 30.06.2009, 17:12   #5
progressist
 
Регистрация: 24.06.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от assasin Посмотреть сообщение
передавай указатель на массив и размерность в функцию
То есть сделать указатель на массив y и в функцию step передавать указатель на масиив?
progressist вне форума Ответить с цитированием
Старый 30.06.2009, 17:39   #6
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

именно это и имел в виду
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение системы линейных уравнений методом Гаусса. maliyusha Помощь студентам 16 18.02.2013 15:44
Решение системы Caragius Microsoft Office Excel 2 26.12.2008 13:33
Решение системы диф уранений методом Эйлера Richi Microsoft Office Excel 5 13.05.2008 11:36