matlab怎么求一个三元一次方程组的解,关于一个三元一次方程的问题(matlab和excel)...

本文介绍了如何利用matlab和excel解决一个实际的三元一次方程组问题,旨在求解满足特定条件的工作日分配方案。通过matlab的meshgrid和find函数寻找整数解,同时探讨了excel的规划求解功能在处理这类约束问题时的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天碰到一个同学问我一个关于考勤的问题。

每个月他需要工作27天,需要在一天工作4个小时、10个小时、8个小时之前做选择天数,然后凑够一个月180个小时的工时。

数学上看,这就是个“三元一次方程组”问题。如图所示:

a8acfce6d40394ab4622ea4a59ca8a27.png

很显然,这两个方程构成的面在三维空间中相交,形成一条直线。

(可以matlab实现视觉效果,如图)

代码如下:

[x1,x2]=meshgrid(1:0.1:31);

x3=(180-4x1-10x2)/8;

mesh(x1,x2,x3)

hold on

x3=(27-x1-x2);

mesh(x1,x2,x3);

%plot3 和mesh函数都能画三维的,但是画出来的效果有所不同

c85add937be490dddaeee92a4f3c3bfe.png

但是,我们现在的问题是:如何求出满足这两个方程的整数解呢?

这里我使用了一种方式,用meshgrid函数画网格,并通过find函数找到相关的解。

最后输出的结果:

7d98fcec9244a1edcaa719ee0932ef43.png

代码如下:

%找出满足约束的工作日分配的整数解

function workday(m,n)

x1=1:31;

x2=1:31;

x3=1:31;

[x1,x2,x3]=meshgrid(x1,x2,x3);

z1=4* x1+10* x2+8* x3;

z2=x1+x2+x3;

k=find(z1== m&z2==n);

X=[x1(k) x2(k) x3(k)]

函数中的m和n分别对应一个月的工时和工作天数,可以根据需要调整。但是这个函数有个问题,就是如果最后求不出整数解,那么输出是empty。事实上,很多情况下一些小数解,是可以被实际接收的。

——————————————————————

用matlab解决了这个问题之后,遇到的一个问题是,很多人并没有装matlab。那么有没有一种更加简单的工具来实现这个问题呢?

我想到了excel。excel是可以求解方程组的。但是经尝试之后,我发现excel只能用来解有确定解的方程组,但是无法求出这种约束问题。

下面给出任何用excel求解方程组。

我们用下面的三个三元一次方程组作为案例。

be0c80097519d096f3c3ef3ee4381dd1.png

这里需要用到excel上的“规划求解”功能。在任务栏“数据”中。

053c44ae930503826f2700ed52db593f.png

很多人可能一开始找不到,这是因为这个功能是自选模块,需要在excel“文件”→“选项”→“自定义功能区”→“开发者工具”,勾选上“开发者工具”之后,在excel任务栏中点开“开发者工具”,然后选择“excel加载项”,找到“规划求解”勾选即可。

2d8acced0f7d8ddeda06ea3ef39c3397.png

之后我们建立如图所示的表格,

49453fbb08710dc13e4fa17fc6b61f21.png

注意,在constraint对应的单元格中输入约束方程。

之后我们点击“规划求解”,然后添加对应的约束和可变单元格,目标单元格。这里注意,目标单元格,应该是三个约束方程中的一个。如下图所示

a9ecfc3bf5cb6ae2ab0244c574af41d9.png

之后,我们选择一种求解方法,点击,即可得到最后结果。

af1dcd7ae0b55551d011612f9e17e2eb.png

总结:

折腾了半天excel,发现还是matlab好。

标签:一次方程,求解,excel,matlab,x2,x3,x1

来源: https://blog.youkuaiyun.com/JackSword1994/article/details/111045649

### 回答1: 在Matlab中,可以使用线性代数三元一次方程,也可以使用器工具箱中的函数来决此类问题,如"linsolve"或"mldivide"函数。您还可以使用矩阵运算或手动方程决此类问题。 ### 回答2: MATLAB一个强大的数学计算软件,可以用于决各种不同类型的数学问题,包括三元一次方程三元一次方程的基本思路是将其转化为矩阵形式,然后利用MATLAB中的矩阵运算即可。 下面是具体的步骤: 1.三元一次方程写成矩阵形式: |a11 a12 a13| |x1| |b1| |a21 a22 a23| * |x2| = |b2| |a31 a32 a33| |x3| |b3| 其中,a11到a33是系数矩阵,x1到x3是未知量成的列向量,b1到b3是常数矩阵。 2.MATLAB中的矩阵函数生成系数矩阵、未知量矩阵常数矩阵。假设系数矩阵为A,未知量矩阵为X,常数矩阵为B,则可以用以下代码生成: A = [a11 a12 a13; a21 a22 a23; a31 a32 a33]; X = [x1; x2; x3]; B = [b1; b2; b3]; 3.MATLAB中的矩阵函数方程。可以使用MATLAB中的inv函数计算系数矩阵A的逆矩阵,然后用逆矩阵乘以常数矩阵B得到未知量矩阵X,即: X = inv(A) * B; 如果系数矩阵A是奇异矩阵,即行列式为0,则不能逆矩阵。此时可以使用MATLAB中的\运算符方程,即: X = A \ B; 该运算符会利用高斯-约旦消元法方程。 4. 输出结果。可以用以下代码输出未知量矩阵X的值: fprintf('x1 = %f\n', X(1)); fprintf('x2 = %f\n', X(2)); fprintf('x3 = %f\n', X(3)); 以上就是三元一次方程MATLAB代码实现过程。需要注意的是,如果系数矩阵A的行列式为0或者矩阵A不是方阵,则无法。另外,MATLAB对于大规模矩阵的可能需要较长时间,需要根据具体情况选择合适的计算机配置算法。 ### 回答3: Matlab是一款强大的数值计算软件,可以用来各种数学问题。对于一个三元一次方程Matlab提供了多种方式。 方法一:矩阵逆法 将三元一次方程的系数矩阵A与常数矩阵B成增广矩阵C,出矩阵C的逆矩阵C-1,再对C-1乘上B,即可得到方程。 代码实现: A = [a11 a12 a13; a21 a22 a23; a31 a32 a33]; B = [b1; b2; b3]; C = [A B]; C_inverse = inv(C); x = C_inverse(:,4); 其中,a11、a12等为系数矩阵A的元素,b1、b2、b3为常数矩阵B的元素。 方法二:高斯-约旦消元法 将三元一次方程的系数矩阵A与常数矩阵B成增广矩阵C,使用高斯-约旦消元法将C化为上三角矩阵,再使用回代法方程。 代码实现: A = [a11 a12 a13; a21 a22 a23; a31 a32 a33]; B = [b1; b2; b3]; C = [A B]; n = length(B); for i = 1:n-1 for j = i+1:n m = C(j,i)/C(i,i); C(j,:) = C(j,:) - m*C(i,:); end end x = zeros(n,1); x(n) = C(n,n+1)/C(n,n); for i = n-1:-1:1 x(i) = (C(i,n+1)-C(i,i+1:n)*x(i+1:n))/C(i,i); end 方法三:MATLAB函数solve Matlab提供了solve函数,可以直接输入三元一次方程的系数矩阵A与常数矩阵B,出方程。 代码实现: A = [a11 a12 a13; a21 a22 a23; a31 a32 a33]; B = [b1; b2; b3]; x = solve(A*x == B, x); 以上三种方法各有优缺点,具体使用时可根据实际情况选择。需要注意的是,如果系数矩阵A的行列式为0,则方程或有无数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值