Помогите, пожалуйста, найти ошибку...
Добавлено: 26 май 2010, 20:15
Вот программа для решения системы двух нелинейных уравнений методом Ньютона. Что в ней можеть быть не так?
Код: Выделить всё
#include <iostream>
#include <math.h>
using namespace std;
void main(void)
{
cout<<"a[1,1]*x1^c[1,1]+a[1,2]*x2^c[1,2]+b1=0\n";
cout<<"a[2,1]*x1^c[2,1]+a[2,2]*x2^c[2,2]+b2=0\n\n";
double a[2][2],c[2][2],b[2];
int i,j;
for(i=0;i!=2;i++)
{
for(j=0;j!=2;j++)
{
cout<<"a["<<i+1<<"]["<<j+1<<"]=";
cin>>a[i][j];
cout<<"c["<<i+1<<"]["<<j+1<<"]=";
cin>>c[i][j];
}
cout<<"b"<<i+1<<"=";
cin>>b[i];
}
double m[2][2],f[2],x[2],w[2][2],d,g[2],t;
for(i=0;i!=2;i++)
{
cout<<"x"<<i+1<<"=";
cin>>x[i];
}
cout<<"t=";
cin>>t;
f[0]=a[i][0]*pow(x[0],c[i][0]+a[i][1]*pow(x[1],c[i][1])+b[0]);
f[1]=a[i][0]*pow(x[0],c[i][0]+a[i][1]*pow(x[1],c[i][1])+b[0]);
while (fabs(f[0])<t && fabs(f[1])<t)
{
for(i=0;i!=2;i++)
f[i]=a[i][0]*pow(x[0],c[i][0]+a[i][1]*pow(x[1],c[i][1])+b[0]); // f(x0)
for(i=0;i!=2;i++)
for(j=0;j!=2;j++)
m[i][j]=a[i][j]*c[i][j]*pow(x[j],c[i][j]-1); // матрица Якоби
d=m[0][0]*m[1][1]-m[1][0]*m[0][1]; // матрица Якоби в -1 степени
w[0][0]=m[1][1]/d;
w[0][1]=-m[1][0]/d;
w[1][0]=-m[0][1]/d;
w[1][1]=m[0][0]/d;
for(i=0;i!=2;i++)
x[i]=x[i]-w[i][0]*f[0]+w[i][1]*f[1]; // x(i)=x(i-1)-W^(-1)(x(i-1))*f(x(i-1))
}
for(i=0;i!=2;i++)
cout<<"x"<<i+1<<"="<<x[i]<<"\n";
}