Matlab中不同维数矩阵相加问题
这样:
>> A=[1,2,3;4,5,6;7,8,9],B=[1,2;3,4]
A =
1 2 3
4 5 6
7 8 9
B =
1 2
3 4
>> [rA,cA]=size(A);
>> [rB,cB]=size(B);
>> C=zeros(max(rA,rB),max(cA,cB));
>> C(1:rA,1:cA)=A;
>> C(1:rB,1:cB)=C(1:rB,1:cB)+B;
>> C
C =
2 4 3
7 9 6
7 8 9
>> [2,4,3;8,10,6;7,8,9]
ans =
2 4 3
8 10 6
7 8 9
扩展资料:
注意事项
两个大小不同的矩阵是不能相加的,要实现对应位置相加,需要将纬度较小的扩展为纬度较大的矩阵,没有数据的位置填上零,形成两个大小相同的矩阵,然后再相加。
matlab最大的好处就是不用事先定义变量,按列存储数据,只要每一列的数据个数是不变的,就可以直接使用,直接使用的变量默认为矩阵,只要存储了第一列数据,其行数就确定了,但列数是可变的,不会报错,放心使用,但前提是你的行数一旦确定就不能超过第一次使用的行数,否则会报错,需要另行编制程序。
请问怎么用matlab进行图像拼接,两幅图有重叠部分,要拼接的图像是excel格式的?
1种情况:横向重叠 找到重叠的那一行就行了,然后去除多余部分 for ii=1:m if a(ii,:)==b(ii,:) result=a的上半部分+b的下半部分; end end 2种情况:纵向重叠 找到重叠的那一列就行了,然后去除多余部分
matlab提示至少缺少一个 END:语句可能从此处开始。求大神帮忙
for i = 1:27
。。。
END
最后一行的END是小写 end,你写成大写了。改了就好了。
Matlab中:在利用fmincon函数求一个约束优化问题时报这个错误: FMINCON requires all values returned by user functions to be of data type double. 希望有遇到类似问题的朋友能够帮个忙,解答一
程序还是不给你,自己学会了,要写很简单的。按照步骤,照猫画虎就可以了。由于我不能贴图,
例子中的数学模型没有写,供你参考。
优化工具箱提供
fmincon
函数用于对有约束优化问题进行求解,其语法格式如下:
x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...)
[x,fval] = fmincon(...)
[x,fval,exitflag] = fmincon(...)
[x,fval,exitflag,output] = fmincon(...)
其中,
x, b, beq, lb,
和
ub
为线性不等式约束的上、下界向量,
A
和
Aeq
为线性不等式约束和等式
约束的系数矩阵矩阵,
fun
为目标函数,
nonlcon
为非线性约束函数。
显然,其调用语法中有很多和无约束函数
fminunc
的格式是一样的,其意义也相同,在此不在重复
介绍。对应上述调用格式的解释如下:
x
=
fmincon(fun,x0,A,b)
给定初值
x0
,求解
fun
函数的最小值
x
。
fun
函数的约束条件为
A*x
<=
b
,
x0
可以是标量或向量。
x = fmincon(fun,x0,A,b,Aeq,beq)
最小化
fun
函数,约束条件为
Aeq*x = beq
和
A*x <= b
。若没有
不等式线性约束存在,则设置
A=[]
、
b=[]
。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
定义设计变量
x
的线性不等式约束下界
lb
和上界
ub
,使得
总是有
lb <= x <= ub
。若无等式线性约束存在,则令
Aeq=[]
、
beq=[]
。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
在上面的基础上,在
nonlcon
参数中提供非线性不
等式
c(x)
或等式
ceq(x)
。
fmincon
函数要求
c(x) <= 0
且
ceq(x) = 0
。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
用
options
参数指定的参数进行最小化。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)
将问题参数
P1, P2
等直接传递给
函数
fun
和
nonlin
。若不需要这些变量,则传递空矩阵到
A, b, Aeq, beq, lb, ub, nonlcon
和
options
。
[x,fval] = fmincon(...)
返回解
x
处的目标函数值到
fval
。
[x,fval,exitflag] = fmincon(...)
返回
exitflag
参数,描述函数计算的有效性,意义同无约束调用。
[x,fval,exitflag,output] = fmincon(...)
返回包含优化信息的输出参数
output
。
非线性不等式约束
nonlcon
的定义方法
该参数计算非线性不等式约束
c(x)<=0
和非线性等式约束
ceq(x)=0
。
nonlcon
参数是一个包含函数
名的字符串。该函数可以是
M
文件、内部文件或
MEX
文件。它要求输入一个向量
x
,返回两个变
量
—
解
x
处的非线性不等式向量
c
和非线性等式向量
ceq
。例如,若
nonlcon=mycon
,则
M
文件
mycon.m
须具有下面的形式:
function [c,ceq] = mycon(x)
c = ... %
计算
x
处的非线性不等式。
ceq = ... %
计算
x
处的非线性等式。
若还计算了约束的梯度,即
options = optimset(GradConstr,on)
则
nonlcon
函数必须在第三个和第四个输出变量中返回
c(x)
的梯度
GC
和
ceq(x)
的梯度
Gceq
。
function [c,ceq,GC,GCeq] = mycon(x)
c = ... %
解
x
处的非线性不等式。
ceq = ... %
解
x
处的非线性等式。
if nargout > 2 %
被调用的
nonlcon
函数,要求有
4
个输出变量。
GC = ... %
不等式的梯度。
GCeq = ... %
等式的梯度。
end
4.1
应用举例
已知某设计问题可以简化为如下数学模型:
显然,此模型属于一个二维约束优化问题。应用
fmincon
函数求解此优化模型,需要如下几个步骤:
1
)编制目标函数的
M
文件
在
Matlab
主窗体的命令行中键入:
“edit myobj.m”
,并在打开的窗口中编制代码创建目标函数
M
文
件:
function f=myobj(x)
f=2*x(1)^2+2*x(2)^2-2*x(1)*x(2)-4*x(1)-6*x(2);
将其保存为
myobj.m
备用。
2
)编制非线性约数函数的
M
文件
若有非线性约束,则应用如下步骤创建约束函数
M
文件:在
Matlab
主窗体的命令行中键入:
“edit
mycon.m”
并在打开的窗口中编制相应的代码创建约束函数
M
文件:
function [c,ceq]=mycon(x)
%
非线性不等式约束条件的表达式,
c(1)=...,c(2)=...
c(1)=x(1)+5*x(2)^2-5;
%
非线性等式约束条件的表达式
ceq=[];
本例中没有非线性约束,故可以用上述表达方式,也可省略这一步。
3)
确定其他类型约束条件的系数矩阵及常数向量
如本例中的优化模型所示,容易确定其余的输入参数,线性不等式约束条件的系数矩阵
A
和常数向
量分别为:
A=[1 1]
,
b=[2 ]
,线性等式约束不存在,故
Aeq
=
[],beq=[]
,设计变量
X
的上、下界向
量:
lb=[0 0]
,
ub=[inf inf]
,其中
inf
表示无穷大。
4
)调用
fmincon
函数进行求解
经过上述各步骤设置以后,可以编制主程序进行优化求解,相应的代码如下:
>> x0=[1 1]; %
设置计算初始值
>> options=optimset(LargeScale,off,display,iter);
%设定优化选项参数
>> [x,fval,exitflag]=fmincon(@myobj,x0,A,b,[],[],lb,ub,@mycon,options)
%进行优化求解
讲过运算以后得到结果如下所示:
Optimization terminated successfully:
First-order optimality measure less than options.TolFun and
maximum constraint violation is less than options.TolCon
Active Constraints:
3
4
x =
1.1190 0.8810
fval =
-7.6771
exitflag =
1
Matlab 系统函数H(z)零极点的分离 急啊!
ts=0.001; sys=tf(1000,[1,50,2000]); dsys=c2d(sys,ts,z) [num,den]=tfdata(dsys,v);
[r,p,k]=residue(num,den);
%%%%%%%%%%结果如下
r =
0.0002 - 0.0133i 0.0002 + 0.0133i
p =
0.9746 + 0.0362i 0.9746 - 0.0362i
k =
[]