【Matllab】笔记(2)——程序文件/函数/绘图

本文介绍MATLAB中的M文件创建及编辑方法,涵盖循环结构、条件判断等编程基础,并讲解了函数定义、调试技巧及绘图操作。

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

命令式文件——M文件

Tip:使用<Ctrl>或者<Shift>可以选择多条历史命令
  • 命令窗口输入edit
  • 单击工具栏的“创建”
  • File->New->Blank  M-File
用于创建M文件

例:求sin(0)到sin(10)的值
for i=0:10
    a=sin(i);
    fprintf( 'sin(%d)=',i)
    fprintf( '%.4f\n',a)
end
命名为sinvalve,指定文件路径后,在命令窗口输入

>> sinvalve
sin(0)=0.0000
sin(1)=0.8415
sin(2)=0.9093
sin(3)=0.1411
sin(4)=-0.7568
sin(5)=-0.9589
sin(6)=-0.2794
sin(7)=0.6570
sin(8)=0.9894
sin(9)=0.4121
sin(10)=-0.5440


函数题头:function [输出变量列表]=函数名(输入变量列表)
帮助信息索引行:函数帮助文本的第一行内容为该函数的大致描述,当使用lookfor查看该函数时,显示该行
帮助详细信息:提供函数的完整帮助信息,包括索引行到第一个可执行行或者空行为止的所有注释信息,通过MATLAB的帮助系统查看函数的帮助信息时,显示该部分
函数体:函数的daimaduan
注释部分:对函数题语句的解释和说明文本,注释以英文状态下的“%”引导


function y= AverageVector( x )
% AVERAGEVECTOR Mean of vector elements
% AVERAGEVECTOR(X), where x is a vector, is the mean of
%vector elements. Nonvector input is an error.
[m,n]=size(x);
if (~((m==1)||(n==1)))
    disp( '输入必须是向量');
    return;
end
y=sum(x)/length(x);


for循环语句
for 循环变量=表达式1(初值):表达式2(增量):表达式3(终值)
     循环语句组
end

>> for i=1:10
x(i)=(i).^2;
end
>> x

x =

[ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]




while循环语句
while 表达式
     执行语句
end
例:1~100求和

>> sum=0;i=1;
>> while(i<=100)
sum=sum+i;i=i+1;
end
>> sum

if 表达式
     执行语句
end

if 表达式
     执行语句1
else
     执行语句2
end

%当if有三种及以上选择时
if 表达式1    
         执行语句1
elseif 表达式2
          执行语句2
elseif 表达式3
          执行语句3
...
else      执行语句

end

x=-6:0.1:6; %
leng=length(x); %
for m=1:leng
    if x(m)<=0
        y(m)=sin(x(m));
    elseif x(m)<=3
        y(m)=x(m);
    else
        y(m)=-x(m)+6;
    end
end
plot(x,y, '*'),grid; %




switch-case

switch <选择判断量>
case 选择判断值1
          选择判断语句1
case 选择判断值2
          选择判断语句2
...
otherwise
          判断执行语句
end

特别注意:MATLAB的switch-case和c中的switch-case的不同之处在于,MATLAB当其中一个case为真时,switch-case语句不对后面的case语句进行判断。也就是说即使有多个case判断语句为真,也只执行第一条为真的语句,而不必像c语言中在每个case语句之后加上一个break来防止继续执行后面为真的case条件语句。

例:判断季节
%Seasons
function demo_switch_case(month)
switch month
    case {3,4,5}
        season= 'Spring'
    case {6,7,8}
        season= 'Summer'
    case {9,10,11}
        season= 'Fall'
    case {12,1,2}
        season= 'Winter'
    otherwise
        season= 'Not exist'
end



echon命令可以使M文件的命令在执行时可见,对于程序的调试和演示很有用。对于M文件中文本文件和函数文件,echo命令的作用稍有不同
echo on%打开文本文件的回应命令
echo off%关闭回应命令
echo file on%使指定的file文件的命令在执行中被显示出来
echo file off%关闭指定文件的命令在执行中的回应
echo file%文件在执行中的回应显示开关
echo on all%显示其后所有执行文件的执行过程
echo off all%关闭其后所有执行文件的显示

input命令:用来提示用户从键盘输入字符、字符串或表达式,并接受输入值

pause命令:用于程序暂时终止运行,等待用户按任意键后继续执行
pause           %暂停程序,等待回应
pause(n)       %在程序运行中等待n秒后继续执行
pause on      %显示其后的pause命令,并且执行pause命令
pause off      %显示其后的pause命令,但不执行该命令

keyboard命令:当程序遇到该命令时就暂停运行程序,处于等待键盘输入状态且在屏幕上显示字符K。键盘处理完毕后,输入字符串return,程序将继续执行。
例:判断是否是闰年

disp( 'please input a year:')
keyboard
leapyear(ans)

输入数字回车后,继续在命令行中输入return,控制权返回给MATLAB,即可判断输入年份是否是闰年


常用Debug方法:
  1. 在可能发生错误的M文件删去某些语句末行的分号,使其显示运行的中间结果。(利用return命令恢复程序的执行)
  2. 在M文件适当的位置加上keyboard命令,使其在执行到此处时暂停
  3. 注释掉M文件的函数定义行,使函数文件转变成脚本文件,这样在程序出错时,可以查看M文件产生的中间变量。注意,局部变量之间应避免冲突
  4. 使用MATLAB调试器设置断点,或单步执行

Set/Clear Breakpoint:设置或清除断点
Set/Modify Conditional Breakpoint:设置/修改条件断点
Enable/Disable Breakpoint:开启或者关闭当前行的断点


在同一幅图中画出多条曲线

使用hold on
 plot( )
plot()
plot()
...

hold off命令




### MATLAB 中带常数项的多目标线性规划 在 MATLAB 中处理包含常数项的多目标线性规划问题通常涉及两个方面:一是如何表示多个目标;二是如何引入并处理这些目标中的常数项。 对于单一线性规划问题,`linprog` 函数可以用于求解非整数规划问题[^1]。然而,在面对多目标情况时,MATLAB 并未直接提供专门针对多目标优化的一键式解决方案。相反,常见的做法是通过加权和法或者 ε-约束法来转换成一系列单一目标优化问题来进行求解。 当涉及到带有常数的目标函数时,可以在构建模型的过程中自然地加入这些常数值到相应的位置上。具体来说: - 如果目标函数形式为 \(c_1x_1 + c_2x_2 + ... + cnxn + C\) (其中C代表常数),那么只需要调整输入向量 `f` 的定义即可,即令 `f=[c1;c2;...;cn];` 而常数部分则不影响最终的结果计算因为它不会改变变量之间的相对关系。 下面给出一个多目标线性规划的例子,假设存在两个目标函数以及一些简单的不等式约束条件,并且每个目标都有各自的常数项: ```matlab % 定义决策变量数量 nvars=3; % 目标一系数 (含常数) f1 = [-1;-2]; const_f1 = 5; % 目标二系数 (含常数) f2 = [1;0]; const_f2 = -7; % 合并为目标权重矩阵 F 和对应的常数向量 const_F F = [f1', f2']; const_F = [const_f1, const_f2]; % 设定 A 和 b 表达不等式约束 Ax<=b A = [1, 2, 3; 4, 5, 6]; b = [8; 9]; % 设置边界 lb <= x <= ub lb = zeros(nvars, 1); ub = []; % 使用加权和的方法组合不同目标 weights = [0.5, 0.5]; % 可以根据实际情况调整各目标的重要性比例 combined_obj = weights * F'; constant_term = sum(weights .* const_F); [x_optimal, obj_value] = linprog(combined_obj, A, b, [], [], lb, ub); disp('Optimization completed.'); disp(['The optimal solution is ', num2str(x_optimal)]); disp(['Objective value including constant terms:', num2str(obj_value + constant_term)]); ``` 此代码片段展示了如何在一个简单场景下设置和解决具有常数项的双目标线性规划问题。这里采用了加权平均的方式将两个不同的目标合成为一个综合性的评价标准进行最优化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值