
可以写程序,并且不用编译就可以运行。
可以编译为独立的exe文件。查compile有关的命令,Matlab书籍上都有介绍。
Matlab擅长图像处理,如果有问题,换个函数就行了,读不成问题。
写程序得看具体情况。
Matlab作为一个编程语言,我个人的看法是:无所不能。
clear
a=input('give me a number\n');
y=1;
for s=2:ceil(sqrt(a))
if mod(a,s)==0
y=0;
end
end
b=input('do you want to know if it is prime ','s');
if b=='y'
if y
disp('yes, it is');
else
disp('no, it is not ');
end
end
在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程序。
function [y,y1]=select(ImageData,h,w)%取得最佳阈值将图像二值化
thr=05;delta=005;
y=(ImageData>=thrmean(max(ImageData)));
BW2=bwareaopen(y,10);%删除小面积对象
%格式:BW2 = bwareaopen(BW,P,conn)
%作用:删除二值图像BW中面积小于P的对象,默认情况下conn使用8邻域。
SE=strel('square',15);%创建一个正方形的结构元素
%SE = strel(shape, parameters)
%根据shape指定的类型创建一个结构元素SE。
IM2=imdilate(BW2,SE);%图像膨胀
IM3=imerode(IM2,SE);%图像腐蚀
%1开运算(先腐蚀后膨胀的过程):利用它可以消除小物体,在纤细点处分离物体,平滑较大物体边界,但同时并不明显改变原来物体的面积。OPEN(X,B)
%2闭运算(先膨胀后腐蚀的过程):利用它可以填充物体内细小空洞,连接临近物体、平滑其边界,但同时并不明显改变原来物体的面积。CLOSE(X,B)
average=sum(sum(IM3))/(hw); %将图像二值化
while(average<003||average>008)
if(average<003)
thr=thr-delta;
else
thr=thr+delta;
end
y=(ImageData>=thrmean(max(ImageData)));%求向量元素的平均值
BW2=bwareaopen(y,10);%再一次删除小面积
IM2=imdilate(BW2,SE);%膨胀
IM3=imerode(IM2,SE);%腐蚀
average=sum(sum(IM3))/(hw);%求灰度的平均值
end
y1=y;
y=IM3;
1、A=pi/3[0:6]: 产生0°、60°、120°360°共7个角度值。
2、rexp(iy)是一个复数的指数表达方式,对应平面中的一个点,设为Z,相应的y为向量OZ与X轴正向的夹角,r为向量OZ的模。
因此plot(rexp(iA),'k','linewidth',2);表示在平面上依次绘制7个点,并连线,连线宽度为2,颜色为'k'。最终图形g1为一正6边形。
3、real(rexp(iA))、imag(rexp(iA))分别取出6边形顶点的x、y坐标值(对应于复数的实部real、虚部imag)。然后用fill函数填充区域,set(g1,'FaceColor',[1,05,0])设置颜色。
4、g2与g1大同小异,只是半径rc、角度aa与g1不同。由于所有点的半径都为rc,因此g2为图形为圆。
5、text(0,0,'1','fontsize',10);在圆点处添加数字1。
这是我的理解,供你参考。
%你这种方式画分段函数是新手常犯的错误,注意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,然后绘图,这里不再演示了。
可能错在别的地方吧,我试了下,只是这一段的话,可以实现的,给你看看那我试的程序:
mg=fix(rand(25,4)100);
band=size(mg,2);
for i=1:band
Img(:,:,i)=reshape(mg(:,i),5,5)';
end
Img
%这之前只是为了生成一个三维数据
for i=1:band %将Img第i波段的数据放在X的第i列
temp=Img(:,:,i);
X(:,i)=temp(:);
end
X
以上就是关于用matlab编写程序全部的内容,包括:用matlab编写程序、哪位好心人能帮忙写个简单的matlab程序 很着急 多谢!!、MATLAB如何编写road.m程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)