C++解方程:从遍历到牛顿迭代法

        电脑无法像人一样思考,就像你饭桌上的午餐肉根本不知道自己是以煎还是烤的方式被人吃掉,大学课堂上,老师告诉我们:请别给计算机选择。这一点用C++很好说明,如果你的代码中,B继承A,C继承A,而D共同继承A和B,如果你想要从D中唤起A,那可就麻烦了。因为电脑根本不知道通过那条线路继承,因为B和C可能对A的继承方式不同,使得目标变量的可访问性或许并不唯一。

        对于解方程来说也是一样。我还记得我上大一时,编出来的代码是这样的:

int x,y;
x+2*y=3;
x+y=2;
cout<<"x="<<x<<";"<<"y="<<y<<endl;

现在想想,就好像你对计算机说:快给我x,y的值吧!

然后电脑无动于衷。

老师看了看:这样可不行!想想你第一次学二元一次方程组时,怎么算的。

猜一个值,带进去看看对不对?

想法没错,可是对于计算机来说,它可没办法像你那样猜,或者说,有没有靠谱一点的方法?

for(int x=0;x<=3;x++){
  for(int y=0;y<=3;y++){
    if(x+y==2 and x+2*y==3){
        cout<<x<<" "<<y<<endl;
        }
    }
}

通过遍历求解,不过聪明的读者一下就看出来弊端:

1.你还是在猜!你默认x,y的解从0-3,如果超出了怎么办?

2.你默认解是整数。


此时你想起了大一高数老师说的话:

克莱姆法则可以使用矩阵解多元一次方程组,但解要唯一,学过线性代数的同学更是想到了:

多元一次方程组有唯一解的充要条件为:该方阵的增广矩阵不等于0

所以,用克莱姆法则试试吧:

这里是一个解二元一次方程组的通用形式:

#include <iostream>
using namespace std;
int main(){
	double a1,b1,c1,a2,b2,c2;
	cin>>a1>>b1>>c1>>a2>>b2>>c2;/*
********************************************
这里的a,b,c,d是方程中的常数,即x,y满足:

		a1*x+b1*y=c1;
		
		a2*x+b2*y=c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值