有谁会用牛顿迭代法解方程组?其他方法也行,但要用C/C++语言.

时间:2023-01-07 23:03:38
方程组如下:
vm/(k-ki) + vi/(k-km) = 3/(3*k+4*g);
vm/(g-gi) + vi/(g-gm) = 6*(k+2*g)/5/g/(3*k+4*g);

其中k,g为未知数,其余已知.

13 个解决方案

#1


各位,帮个忙.谢先!

#2


牛顿迭代适合解非线性方程:
其迭代公式为:Xk+1=Xk-f(Xk)/f'(Xk)    f'(x)为f(x)的导数
#include<iostream.h>
#include<math.h>

double f1(double x);   //声明原函数
double f2(double x);   //声明导函数

void main()
{
    double a,x0;x1;

    double eps=1e-8;    //精度要求

    cout<<"please input x0 :";
    cin>>x0;

    while(1)
    {
        if(f2(x0)==0)      //计算x0处的导函数,若为0.则返回
        return;

        x1=x0-f1(x0)/f2(x0);
        if(abs(x1-x0)<eps)      //若满足精度要求就输出
        {
             cout<<"x1="<<x1<<","
                 <<"f1(x1)="<<f1(x1)<<","
                 <<endl;
        }
         break;         //若满足精度要求就跳出  
         elae           //否则就继续循环
             x0=x1;
      };
}

double f1(double x)      //定义原函数
{
     //此处声明原函数体
}

double f2(double x)    //定义导函数
{
     //此处声明导函数体
}        
         
不知道有没有错误,没有调试

#3


double a,x0;x1;   应该为:double a,x0,x1;

#4


‘声明’改为‘定义’

double f1(double x)      //定义原函数           
{
     //此处定义原函数体
}

double f2(double x)    //定义导函数
{
     //此处定义导函数体
}        

#5


linmue(林木),先谢谢你.
不过我是要求方程组的,求方程的算法和程序我也知道.

#6


那还问,把方程组变为方程阿。

#7


Xk+1=Xk-f(Xk)/f'(Xk)

这个方程式怎样?

#8


那你可以偿试用以下的方法:
                        高斯消元法
                        雅可比迭代法
                        高斯--赛德儿迭代法

不过这些方法都要使用到向量与矩阵知识

#9


你这个方程组化简一下就是非齐次方程组,可以用矩阵来解

#10


上 数值计算 的时候做过这个题目。。。

不过具体的要求不知道和你是否一样。。。。

#11


如果把第一式化为g=f(k),然后代入第二式,可以变为只含k的方程组.........道理是这样的,但这个方程组用 Xk+1=Xk-f(Xk)/f'(Xk) 求解的话,长度超过一米!!!有没有别的简单的方法?

#12


刚才有点笔误.抱歉!

如果把第一式化为g=f(k),然后代入第二式,可以变为只含k的一个方程.........道理是这样的,但这个方程用 Xk+1=Xk-f(Xk)/f'(Xk) 求解的话,长度超过一米!!!有没有别的简单的方法?

#13


原来作过的
不过出差中没带代码
等回去再说
找本《电力系统分析〉的书看看,都有,
而且讲的听仔细的

#1


各位,帮个忙.谢先!

#2


牛顿迭代适合解非线性方程:
其迭代公式为:Xk+1=Xk-f(Xk)/f'(Xk)    f'(x)为f(x)的导数
#include<iostream.h>
#include<math.h>

double f1(double x);   //声明原函数
double f2(double x);   //声明导函数

void main()
{
    double a,x0;x1;

    double eps=1e-8;    //精度要求

    cout<<"please input x0 :";
    cin>>x0;

    while(1)
    {
        if(f2(x0)==0)      //计算x0处的导函数,若为0.则返回
        return;

        x1=x0-f1(x0)/f2(x0);
        if(abs(x1-x0)<eps)      //若满足精度要求就输出
        {
             cout<<"x1="<<x1<<","
                 <<"f1(x1)="<<f1(x1)<<","
                 <<endl;
        }
         break;         //若满足精度要求就跳出  
         elae           //否则就继续循环
             x0=x1;
      };
}

double f1(double x)      //定义原函数
{
     //此处声明原函数体
}

double f2(double x)    //定义导函数
{
     //此处声明导函数体
}        
         
不知道有没有错误,没有调试

#3


double a,x0;x1;   应该为:double a,x0,x1;

#4


‘声明’改为‘定义’

double f1(double x)      //定义原函数           
{
     //此处定义原函数体
}

double f2(double x)    //定义导函数
{
     //此处定义导函数体
}        

#5


linmue(林木),先谢谢你.
不过我是要求方程组的,求方程的算法和程序我也知道.

#6


那还问,把方程组变为方程阿。

#7


Xk+1=Xk-f(Xk)/f'(Xk)

这个方程式怎样?

#8


那你可以偿试用以下的方法:
                        高斯消元法
                        雅可比迭代法
                        高斯--赛德儿迭代法

不过这些方法都要使用到向量与矩阵知识

#9


你这个方程组化简一下就是非齐次方程组,可以用矩阵来解

#10


上 数值计算 的时候做过这个题目。。。

不过具体的要求不知道和你是否一样。。。。

#11


如果把第一式化为g=f(k),然后代入第二式,可以变为只含k的方程组.........道理是这样的,但这个方程组用 Xk+1=Xk-f(Xk)/f'(Xk) 求解的话,长度超过一米!!!有没有别的简单的方法?

#12


刚才有点笔误.抱歉!

如果把第一式化为g=f(k),然后代入第二式,可以变为只含k的一个方程.........道理是这样的,但这个方程用 Xk+1=Xk-f(Xk)/f'(Xk) 求解的话,长度超过一米!!!有没有别的简单的方法?

#13


原来作过的
不过出差中没带代码
等回去再说
找本《电力系统分析〉的书看看,都有,
而且讲的听仔细的