24小时热门版块排行榜    

查看: 1383  |  回复: 7

小鬼木木

新虫 (小有名气)

[求助] 已知多组数据,求矩阵中参数 已有1人参与

如附件中图片要求,用MATLAB求取参数,求大神!

已知多组数据,求矩阵中参数
图片1.png
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
小鬼木木: 金币+20, ★★★★★最佳答案 2017-01-12 09:02:35
只有8个未知数但是却有16个方程?
这种解线性方程组的问题用左除就可以搞定了,举个例子。
4x1-x2+x3=5;
-18x1+3x2-x3=-15;
x1+x2+x3=6;;
求x1 x2 x3
CODE:
a=[4 -1 1;-18 3 -1; 1 1 1];
b=[5 -15 6]';
x=a\b

2楼2017-01-09 21:11:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小鬼木木

新虫 (小有名气)

引用回帖:
2楼: Originally posted by pdl9527 at 2017-01-09 21:11:02
只有8个未知数但是却有16个方程?
这种解线性方程组的问题用左除就可以搞定了,举个例子。
4x1-x2+x3=5;
-18x1+3x2-x3=-15;
x1+x2+x3=6;;
求x1 x2 x3

a=;
b=';
x=a\b
...

谢谢您的解答,而我的意思是,我接下来可能会有很多这样的数据,怎么用MATLAB把表中数据直接带入矩阵方程中,而不是用手动输入?
3楼2017-01-10 18:38:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

引用回帖:
3楼: Originally posted by 小鬼木木 at 2017-01-10 18:38:32
谢谢您的解答,而我的意思是,我接下来可能会有很多这样的数据,怎么用MATLAB把表中数据直接带入矩阵方程中,而不是用手动输入?...

所以问题的关键是如何读取excel中的数据然后赋值给x,y,u,v。
由于不知道你的excel文件的具体格式,我根据你的图片做了一个excel并且编写了相应的数据提取和计算程序,希望对你有启发。
CODE:
function question_19
%2017-1-10
clear;clc
%注意修改路径
[~,text,~]=xlsread('X:\My Desktop\data.xlsx');
count=1;
for k=1:size(text,1)
    num=text{k,1};
    if isempty(num) || isempty(str2num(num(2:strfind(num,',')-1)))
        continue;
    end
    for i=1:size(text,2)
        num=text{k,i};
        div=strfind(num,',');
        a(count,i)=str2num(num(2:div-1));
        b(count,i)=str2num(num(div+1:end-1));
    end
    count=count+1;
end
%以上程序用来提取数据,以下程序用来计算参数
x=a(1,:);
y=b(1,:);
u=a(2,:);
v=b(2,:);
row1=[x' y' ones(8,1) zeros(8,3) -(x.*u)' -(y.*u)'];
row2=[zeros(8,3) x' y' ones(8,1) -(x.*v)' -(y.*v)'];
%由于只需要8个方程就可以了,所以存在多种计算参数的方法。
x1=row1\u'
x2=row2\v'

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : data.xlsx
  • 2017-01-10 22:03:49, 9.89 K
4楼2017-01-10 22:05:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小鬼木木

新虫 (小有名气)

引用回帖:
4楼: Originally posted by pdl9527 at 2017-01-10 22:05:11
所以问题的关键是如何读取excel中的数据然后赋值给x,y,u,v。
由于不知道你的excel文件的具体格式,我根据你的图片做了一个excel并且编写了相应的数据提取和计算程序,希望对你有启发。


function question_19 ...

真的太感谢你了,学习了,谢谢!
5楼2017-01-11 16:30:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小鬼木木

新虫 (小有名气)

引用回帖:
4楼: Originally posted by pdl9527 at 2017-01-10 22:05:11
所以问题的关键是如何读取excel中的数据然后赋值给x,y,u,v。
由于不知道你的excel文件的具体格式,我根据你的图片做了一个excel并且编写了相应的数据提取和计算程序,希望对你有启发。


function question_19 ...

你好,我还有些地方不太会,还需要请教你一下。对照我上传的图片中的矩阵方程,按照你上面做出来的是
x1 y1 1 0 0 0 ...
x2 y2 1 0 0 0...
     .......
0 0 0 x1 y1 1 ...
0 0 0 x2 y2 1...
      .......
这样的一个顺序对吧?
而我原本的意思是想要如下这样一个顺序,又该如何修改呢?
x1 y1 1 0 0 0 ...
0 0 0 x1 y1 1 ...
x2 y2 1 0 0 0 ...
0 0 0 x2 y2 1 ...
      .......
不知道我有没有讲清楚我的问题。。。。。。
6楼2017-01-11 20:05:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

引用回帖:
6楼: Originally posted by 小鬼木木 at 2017-01-11 20:05:14
你好,我还有些地方不太会,还需要请教你一下。对照我上传的图片中的矩阵方程,按照你上面做出来的是
x1 y1 1 0 0 0 ...
x2 y2 1 0 0 0...
     .......
0 0 0 x1 y1 1 ...
0 0 0 x2 y2 1...
      .......
...

我是把u和v拆开来算的,因为只有8个未知数,只需要用u或者v两者中的1个矩阵方程组(各有八个方程)就可以求出来,第一行乘以未知数就等于u,第二行乘以未知数就等于v,你说的是同时通过u和v来求,但是这样就有16个方程,所以u,v不能全用,只能各用4个,如果非要改的话,程序如下:
CODE:
function question_19
%2017-1-12
clear;clc
[~,text,~]=xlsread('X:\My Desktop\data.xlsx');
count=1;
for k=1:size(text,1)
    num=text{k,1};
    if isempty(num) || isempty(str2num(num(2:strfind(num,',')-1)))
        continue;
    end
    for i=1:size(text,2)
        num=text{k,i};
        div=strfind(num,',');
        a(count,i)=str2num(num(2:div-1));
        b(count,i)=str2num(num(div+1:end-1));
    end
    count=count+1;
end
x=a(1,:);
y=b(1,:);
u=a(2,:);
v=b(2,:);
row_m=zeros(16,8);
row_m(1:2:end,:)=[x' y' ones(8,1) zeros(8,3) -(x.*u)' -(y.*u)'];
row_m(2:2:end,:)=[zeros(8,3) x' y' ones(8,1) -(x.*v)' -(y.*v)'];
uv_m=zeros(16,1);
uv_m(1:2:end,:)=u';
uv_m(2:2:end,:)=v';
x=row_m(1:8,:)\uv_m(1:8)

7楼2017-01-11 20:34:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小鬼木木

新虫 (小有名气)

引用回帖:
7楼: Originally posted by pdl9527 at 2017-01-11 20:34:52
我是把u和v拆开来算的,因为只有8个未知数,只需要用u或者v两者中的1个矩阵方程组(各有八个方程)就可以求出来,第一行乘以未知数就等于u,第二行乘以未知数就等于v,你说的是同时通过u和v来求,但是这样就有16个 ...

谢谢你,这次都明白了,非常感谢!
8楼2017-01-12 09:02:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 小鬼木木 的主题更新
信息提示
请填处理意见