利用matlab的fimcon函数求冗余约等方程组

最近做毕设,遇到一个用普通计时器测量毫秒级时间的问题。由于实验室条件限制,不能直接测量或者采用其他仪器,为保证精度,想起了小学时做的用铅笔测铁丝直径的实验。如下图,将铁丝绕到铅笔上,铁丝直径=总长度/绕的圈数。

毕设内容的很复杂,问题背景一两句说不清,我这儿换个例子给大家描述:

已知有一大批苹果、橘子、梨三种水果,现在要求每种水果的平均单个果重。由于某些原因,我们无法向上文中铁丝一样,单独测量若干个水果,只能混着测量,实验数据如下:

显然,三个未知数需要三个方程,但是考虑到三次测量可能会有较大误差,我们应该多测量几次,本例中多测量了一次。因此有如下方程组:

现在的目的是解这个冗余约等方程组。使用matlab中的fimcon函数。

这里,将目标函数设置为  冗余约等方程组  各约等式两边相减的绝对值  之和,即:


然后求X=[X0 X1 X2]使得f(X)取得最小值。

matlab 定义函数程序:

function f=myfun1(x)
k1=[12 5 17];
k2=[4 6 8];
k3=[14 15 3];
k4=[7 1 9];
b=[133 63 90 67];
f=abs(k1*x-b(1))+abs(k2*x-b(2))+abs(k3*x-b(3))+abs(k4*x-b(4));

matlab求解方程组函数:

clc
clear all
x0=[1;1;1];
A=[];
b=[];
Aeq=[];
beq=[];
lb=[0;0;0];
ub=[20;20;20];
[x,fval]= fmincon(@(x) myfun1(x),x0,A,b,Aeq,beq,lb,ub)

结果:

可见matlab求解的速度与精度还是相当高的。











猜你喜欢

转载自blog.csdn.net/pofeiren1069/article/details/79837976