게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
본삭슴] 코딩 질문 좀 해도 될까요?
게시물ID : programmer_10979짧은주소 복사하기
작성자 : 침묵하는자
추천 : 0
조회수 : 429회
댓글수 : 9개
등록시간 : 2015/06/07 20:11:44
옵션
  • 본인삭제금지
 과게에도 물어봤었는데 비선형이라 코딩으로 풀어야 할 것 같네요...

C++에 대해서 잘 아시는 분들 조언 해주시면 감사하겠습니다 정말 모르겠어요ㅠ

제 코딩의 목적은요...

y"'+ty"-3y=2t,

y(0)=0, y'(0)=0, y"(0)=1

이 식을 푸는거에요. 그리고 여기서 y가 t에 관한 수식이에요...

그래서 아래와 같은 코드를 짰는데 치명적인 오류가 뜨네요 답도 안 나오고

논리적으로 뭐가 잘못되었는지 알려 주실 수 있나요?
------------------------------------------------------------------
#include<stdio.h> 
#include<math.h> 

double f1(double t, double y);//문제 식 정의
double f2(double t, double y);
double f3(double t, double y, double z );

void main()
{
double y1[200];//y1를 저장할 공간 
double k[100][100];//k값을 저장할 공간 
y1[0] = 0;//y1의 초기치

double y1p, y1c, y1pm;// y1의 예측자, 수정자, 보정예측자 
double t = 0;
int i, j;
double h = 0.1;

for (i = 0; i<3; i++)
{
k[1][1] = f1(t, y1[i]);
k[1][2] = f1(t + h / 2, y1[i] + h / 2.0 * k[1][1]);
k[1][3] = f1(t + h / 2, y1[i] + h / 2.0 * k[1][2]);
k[1][4] = f1(t + h, y1[i] + h * k[1][3]);//y1의 4계 Runge-Kutta식 

y1[i + 1] = y1[i] + h / 6.0 * (k[1][1] + 2 * (k[1][2] + k[1][3]) + k[1][4]);
}

for (j = 3; j<100; j++)
{
t = 0.1 + j / 10.0;

y1p = y1[j] + h / 24.0*(55 * f1(t - 0.1, y1[j]) - 59 * f1(t - 0.2, y1[j - 1]) + 37 * f1(t - 0.3, y1[j - 2]) - 9 * f1(t - 0.4, y1[j - 3]));

y1c = y1[j] + h / 24.0*(9 * f1(t, y1p) + 19 * f1(t - 0.1, y1[j]) - 5 * f1(t - 0.2, y1[j - 1]) + f1(t - 0.3, y1[j - 2]));
//y1의 예측자와 수정자를 구하는 식 

y1pm = y1p + 251.0 / (19.0 + 251.0)*(y1c - y1p);
//y1의 보정 예측자를 구하는 식 

y1c = y1[j] + h / 24.0*(9 * f1(t, y1pm) + 19 * f1(t - 0.1, y1[j]) - 5 * f1(t - 0.2, y1[j - 1]) + f1(t - 0.3, y1[j - 2]));

y1[j + 1] = y1c - 19.0 / (19.0 + 251.0) * (y1c - y1p);
//y1보정 수정자를 구하는 식 

if (t > 10)break;
printf(" t=%lf, y1=%lf \n", t, y1[j + 1]);
}
}

double f1(double t, double y, double z)
{
double f;
f = y ;
return f;
}
double f2(double t, double y, double z)
{
double f;
f = z ;
return f;
}
double f3(double t, double y, double z)
{
double f;
f = 2*t+3*y-t*z;
return f;
}

     

[침묵하는자의 꼬릿말입니다]     
마지막 부분은 아래 함수를 정의하려 했습니다.

dy1/dt=y2

dy2/dt=y3

dy3/dt=2t+3y1-ty2
출처 IT 게시판으로 잘못 찾아갔었음ㅠㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호