Matlab复习

最近开了一门Matlab仿真课,发现自己的matlab几乎全忘了,复习并且引入一些东西。

函数

最一般的

其实matlab的函数和任何语言中的函数作用是一致的,即输入一些变量,输出一些变量。创建的目的就是模块化代码,便于维护,移植,理解。

其函数的命名如下

function [out1,out2…] = Name_of_Function(in1,in2…)

这里的out1就是输出,Name_of_Function函数的名字,in输入;matlab的函数只要和别的脚本 .m 在一个文件夹下就可互相调用,所以函数的脚本文件名最好和函数同名。

function [x,y] = Plus_Subtract(a,b)
x = a+b;
y = a-b;
end

这样你可以同文件夹下的 .m文件调用这个函数

[x y] = Plus_Subtract(2,1)

得到结果

x =
     3
y =
     1

匿名函数/句柄

匿名函数其实就是直接在某个脚本文件中直接写出的函数,免去单独建立一个函数脚本的麻烦。
但注意,使用这种方法适合较简单的函数。
匿名函数的语法如下

f = @(arglist)expression

其中f为任意名称;@ 表示这是一个匿名函数;arglist 是你要设定的变量/输入值,expression是表达式;

f = @(x,y)[x+y;x+666];
a=f(1,2)

输出如下:

a =
     3
   667

解一般代数方程

solve

solve(eq)

一般输入

其中eq为计算的方程,对于eq方程的建立有多种方式:
例如:

a  = x^2-7*x+12;
a1 = x^2-7*x==-12;
a2 = 'x^2-7*x+12=0';
solve(a)
solve(a1)
solve(a2)
solve('x^2-7*x+12=0')

其结果都是一致的:

ans =
 3
 4

这里推荐 aa1的写法。

特殊求解

如果没有指定要求解的变量,matlab会自动选择一个量作为变量求解;

a=v-u-3*t^2;
solve(a)
solve(a,u)
ans =
3*t^2 + u
ans =
- 3*t^2 + v

可见这里matlab自动选取了v作为求解变量。

多方程求解

a=x*y-1
b=x^2+2*y^2+4*z^2-7
c=2*x^2+y^3+6*z-7
[A B C]=solve(a,b,c,x,y,z)

结果太复杂,这里不再粘贴;若方程无解析解则会返回Empty sym: 0-by-1

fsolve

fsolve用于解非线性方程组,具体的可以设置很多参数,请见官方手册,这里我们简要介绍,重点讲述一些值得注意的内容。

fsolve(fun,x0)

这里的fun是被求解的函数,x0 为其初始值. fsolve使用最小二乘法求解方程,所以初始值设置的不对,方程无法解出.

这里要注意一点,即函数fun的格式.
在这里插入图片描述
如图求解这样一个方程,需要设函数如下:

function F = My_Root(x)
F(1) = x(1)^2 + 2*sin(x(2)*pi/2) + x(3)^2 -1;
F(2) = -2*x(1)*x(2) + x(3) -3
F(2) = x(1)^2*x(3) - x(2) -7

可见,把原方程所有的项移动到等号左边。x 被替换为
x(1) ,y 被替换为x(2) , z 被替换为x(3).

可知这里函数传入的参数x,实际是一个列向量,一个储存了三个变量可能值得列向量;
而返回值 F 也是一个列向量,一个储存了三个方程的列向量。

使用这样的原因是fsolve 其实是代入值来求解方程的数值解的。这样做就可以传入不同变量的初始值。

x0 = [1;2;3]  %选取一个初始值
fsolve(F,x0)  %这个初始值会被赋给x(1)x(2)x(3) 

实际上这个初值得不到解,这里就不再附上结果。

最优化问题

对于这样一个最优化问题:
在这里插入图片描述

可以用函数fmincon 来实现:

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

其中fun 就是最优化问题中得 f ( x ) f(x) f(x);
x0 是初始值,可以随意给出;
nonIcon 就是约束条件中的 c ( x ) , c e q ( x ) c(x),ceq(x) c(x),ceq(x)。所以这个参数需要传入一个函数,且函数是向量形式的,类似上面所说fsolve 中所定义的函数;
剩下的参数对应最优化函数的对应约束条件;

用matlab实现这个优化问题
在这里插入图片描述

参考代码:

A=[];b=[];Aeq=[];beq=[];lb=[];ub=[];         %初始化一些没被用到得条件

function1 = @(x) [ x(1)^2 - 2*x(1) + x(2)];  %使用句柄创建一个函数
nonIcon1 = @homework_8_nonIcon1;             %用句柄形式传入参数
x0=[1,2];
fmincon(function1,x0,A,b,Aeq,beq,[0;0],ub,nonIcon1)

function [c ceq] = homework_8_nonIcon1( x ) 
%用于产生nonIcon参数的对应的内容
c = 4*x(1)^2 + x(2)^2-4;
ceq= [];
end

得到结果

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the default value of the optimality tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.

<stopping criteria details>
ans =
    0.9995    0.0000
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值