%你这种方式画分段函数是新手常犯的错误,注意x<a,这种形式不是一个一个对x元素判断的。
%如果x是一个矩阵(向量),那么x<a,会返回一个同维0,1矩阵,其中满足条件的元素为1
%而if x < a 除非返回矩阵中的元素全为一,否则结果不会为真,这也就是你肯定执行
%else的原因
%下面我以0<=x<=1,y=x,1<=x<=2,y=x^2为例画分段函数,你对应着改就行
clear
clc
%方法一,分段分别画,然后用hold on将图像保持在同一个axes中
%保持在同一个坐标轴中还可以用set(gca,'Nextplot','Add')命令
x1 = linspace(0,1,30);
y1 = x1;
x2 = linspace(1,2,30);
y2 = x2^2;
plot(x1,y1)
hold on
%或者
% set(gca,'Nextplot','Add')
plot(x2,y2)
%方法二,巧用判断条件
x = linspace(0,2,60);
y = x(x>=0)(x<=1) + x^2(x>1)(x<=2);
plot(x,y)
%方法三,使用矩阵索引
x = linspace(0,2,60);
x1 = x(x>=0&x<=1);
x2 = x(x>=1&x<=2);
y1 = x1;
y2 = x2^2;
plot(x1,y1)
set(gca,'Nextplot','Add');
plot(x2,y2)
%注意这时第一个线段最后一个元素和第二个线段第一个元素没连在一起,如果需要连
%使用如下语句
line([x1(end) x2(1)],[y1(end) y2(1)])
%方法四,将原分段函数编为一个m函数,然后使用for循环求出函数值,最后画图
%这种方法虽然易懂,但速度慢不推荐
x = linspace(0,2,60);
y = zero(size(x));
for fi = 1:size(x,2)
y(fi) = myfun(x(fi)); %myfun为自己定义的分段函数
end
plot(x,y)
%myfun函数清单如下
function y = myfun(x)
if x >= 0 & x <= 1
y = x;
else
y = x^2;
end
end
以上基本就是matlab中所有画分段函数的方法,其中强烈推荐方法二,但是当分段较多时,这种方法不是很直观。当分段较多时,推荐使用方法三,分别将符合各段的自变量提出,然后分别求出y。进行绘图。当分段不是不多也不少时,推荐使用方法一分段定义x,然后求出y绘图。均为个人经验总结。
你这道题使用方法二解法如下:
%%clear
clc
x = -5:2:5;
y = (x^3-x5)(x<0)(x~=-3) + (x^2-x5+6)(x>0)(x<5)(x~=2)
(x~=3) + (x^2-x-1)((x==-3)|(x==2)|(x==3)|(x==5))
plot(x,y)
y =
-100 11 4 2 5 19
x-y图如下:
可以看出当分段较多时,该方法虽然运算较快,但不是很直观。这时可以考虑使用方法四,即for循环的方式,分别求出y,然后绘图,这里不再演示了。
function xpbombs(arg1,arg2,arg3)
%XPBOMBS Play the minesweeper game
% There are 13 bombs hidden in the mine field Try to flag them
% and uncover all of the other spaces without getting blown up
% In each non-bomb square is printed the number of adjacent
% squares which contain bombs
%
% Use the FLAG button to toggle in and out of flag mode When
% in flag mode, clicking on any covered square places a flag on it
% Clicking on any flag removes it
%
% At any time during the game, the number of remaining unflagged
% bombs (assuming every flag is on a bomb) is shown in the upper left
%
% NEW stops the game and creates a new minefield
%
% CLOSE closes the game window
% Copyright 1984-2015 The MathWorks, Inc
persistent h minefield cntmines rows cols t nummines remaining
persistent HEIGHT WIDTH BWIDTH BHEIGHT textHndl
persistent flagHndl bomb hidden flag hb nhb hflag
if nargin < 1,
arg1 = 'start';
end;
if strcmp(arg1,'start') ;
rows = 8; % 16;
cols = 8; % 30;
nummines = 13; % 99;
BWIDTH = 35;
SWIDTH = 0;
BHEIGHT = 35;
SHEIGHT = 0;
WIDTH = BWIDTH + SWIDTH;
HEIGHT = BHEIGHT + SHEIGHT;
程序接口
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。允许用户编写可以和MATLAB进行交互的C或C++语言程序。
另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
在MATLAB中,可以通过创建一个以m为文件扩展名的脚本文件来编写程序。下面是一个简单的例子,展示了如何编写一个名为roadm的MATLAB程序:
打开MATLAB编辑器或任何文本编辑器。
创建一个新文件,并将其命名为roadm,确保文件扩展名为m。
在roadm文件中输入以下MATLAB代码:
% roadm - 一个简单的MATLAB程序示例% 清空命令窗口和工作空间
clc;
clear;
% 输入用户姓名
name = input('请输入您的姓名: ', 's');
% 输出欢迎消息
fprintf('欢迎来到MATLAB的世界, %s!\n', name);
% 计算两个数的和
a = input('请输入第一个数: ');
b = input('请输入第二个数: ');
sum = a + b;
% 输出计算结果
fprintf('两个数的和是: %d\n', sum);
以上代码演示了一个简单的MATLAB程序,其中包含了输入、输出和简单的计算 *** 作。程序首先清空了命令窗口和工作空间,然后通过input函数获取用户输入的姓名和两个数,通过fprintf函数输出欢迎消息和计算结果。
注意:MATLAB中的注释使用%符号,用于注释掉代码中的一行或多行。注释可以帮助解释代码的作用和功能。
保存roadm文件后,您可以在MATLAB命令窗口中运行这个程序,通过输入road命令即可执行。程序会提示您输入姓名和两个数,然后输出欢迎消息和计算结果。您可以根据自己的需求和逻辑在roadm文件中编写更复杂的MATLAB程序。
以上就是关于matlab程序全部的内容,包括:matlab程序、如何用matlab编写一个扫雷程序、MATLAB如何编写road.m程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)