MATLAB程序大全(从入门到实战含完整可运行代码)_第1页
MATLAB程序大全(从入门到实战含完整可运行代码)_第2页
MATLAB程序大全(从入门到实战含完整可运行代码)_第3页
MATLAB程序大全(从入门到实战含完整可运行代码)_第4页
MATLAB程序大全(从入门到实战含完整可运行代码)_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB程序大全(从入门到实战,含完整可运行代码)一、MATLAB基础入门程序(新手必练)1.1环境基础操作(熟悉界面与核心指令)说明:涵盖工作路径设置、变量管理、帮助查询等基础操作,适配Windows/macOS/Linux全系统,新手可先执行熟悉环境。matlab

%MATLAB基础环境操作示例

%1.查看当前工作路径

pwd;

%2.切换工作路径(示例:切换到D盘Matlab文件夹,路径无中文、空格)

cd('D:\Matlab');

%3.列出当前路径下的所有文件

ls;

%4.清空命令行窗口

clc;

%5.清空工作区所有变量

clear;

%6.关闭所有图形窗口

closeall;

%7.查看函数帮助(示例:查看sin函数用法)

helpsin;

%8.验证环境是否正常(输出ans=2即为正常)

1+1;

1.2变量与数据类型(MATLAB核心基础)说明:MATLAB无需声明变量类型,默认以矩阵/数组形式存储,以下涵盖常用数据类型的定义与操作,注释详细可直接运行。matlab

%1.数值型变量(标量、矩阵、复数)

a=5;%标量(1×1矩阵)

b=[123;456];%2×3矩阵(行内空格分隔,行间分号分隔)

c=3+4i;%复数

d=25/0;%无穷大(Inf)

e=0/0;%无意义值(NaN)

%2.字符型与逻辑型

f='HelloMatlab';%字符数组(单引号包裹)

g=strcat('Hello','World!');%字符拼接(横向)

h=strvcat('Hello','World!');%字符拼接(纵向)

i=(a>3);%逻辑型(true=1,false=0)

%3.结构体(存储复杂关联数据)

='张三';

student.age=20;

student.grade=[908595];%结构体嵌套数组

%4.单元格数组(存储不同类型数据)

cell_arr{1,1}=123;

cell_arr{1,2}='Matlab';

cell_arr{2,1}=[123];

%查看所有变量信息

whos;

1.3矩阵与数组操作(MATLAB灵魂功能)说明:涵盖矩阵创建、切片、运算、特殊矩阵生成,是后续所有实战的基础,重点掌握点运算与矩阵运算的区别。matlab

%1.矩阵创建与基本信息

A=[1234;5678;9101112];%3×4矩阵

[m,n]=size(A);%获取矩阵行数(m)和列数(n)

len=length(A);%获取矩阵最长维度长度

num=numel(A);%获取矩阵总元素个数

%2.特殊矩阵生成

zeros_mat=zeros(3,2);%3×2零矩阵

ones_mat=ones(3,2);%3×2全1矩阵

rand_mat=rand(3,2);%3×2随机矩阵(0-1均匀分布)

randn_mat=randn(3,2);%3×2正态分布随机矩阵

magic_mat=magic(4);%4阶魔方矩阵(行、列、对角线和相等)

eye_mat=eye(4);%4阶单位矩阵

%3.矩阵切片(核心操作)

A_row2=A(2,:);%取第2行所有元素(列向量)

A_col3=A(:,3);%取第3列所有元素(列向量)

A_part1=A(2:5,:);%取第2到5行(不足则取到最后一行)

A_part2=A(2:2:5,:);%取第2、4行(步长为2)

A_all=A(:);%取所有元素(按列拼接为列向量)

A_trans=A';%矩阵转置

%4.矩阵运算(区分矩阵运算与点运算)

B=[10;11;23];

mat_mul=A*B;%矩阵乘法(需满足A列数=B行数)

dot_mul=A(1:3,1:2).*B;%点乘法(对应元素相乘,需同维度)

dot_div=A(1:3,1:2)./B;%点除法(对应元素相除)

dot_pow=A(1:3,1:2).^2;%点乘方(对应元素平方)

%5.矩阵常用函数

A_sum_col=sum(A);%按列求和(行向量)

A_sum_row=sum(A,2);%按行求和(列向量)

A_sum_all=sum(A(:));%矩阵所有元素求和

A_inv=inv(B);%求矩阵逆(需为方阵且非奇异)

[V,D]=eig(magic_mat);%求矩阵特征值(D)和特征向量(V)

二、MATLAB核心功能程序(高频使用)2.1数据可视化(绘图功能,科研/报告必备)说明:涵盖2D绘图、3D绘图、动态绘图,可直接修改参数适配自身数据,注释清晰,便于自定义样式。matlab

%1.2D绘图(基础折线图、直方图、散点图)

figure(1);%新建图形窗口1

x=0:0.01:2*pi;%生成0到2π的自变量,步长0.01

y1=sin(x);

y2=cos(x);

%绘制sin和cos曲线,设置颜色、线型、标签

plot(x,y1,'r-','LineWidth',1.5,'DisplayName','sin(x)');

holdon;%保持当前图形,继续绘制

plot(x,y2,'b--','LineWidth',1.5,'DisplayName','cos(x)');

plot(x,zeros(size(x)),'k--','LineWidth',1);%绘制x轴参考线

%图形美化与标注

xlabel('x(rad)','FontSize',12);

ylabel('y=sin(x)/cos(x)','FontSize',12);

title('sin(x)与cos(x)曲线对比','FontSize',14,'FontWeight','bold');

legend('Location','best');%图例放在最佳位置

gridon;%显示网格

holdoff;%结束绘图保持

%2.直方图(数据分布展示)

figure(2);

data=randn(1000,1);%生成1000个正态分布数据

histogram(data,30,'FaceColor',[0.20.80.8],'EdgeColor','black');

xlabel('数据值','FontSize',12);

ylabel('频数','FontSize',12);

title('正态分布数据直方图','FontSize',14,'FontWeight','bold');

gridon;

%3.3D绘图(曲面图)

figure(3);

[X,Y]=meshgrid(-2:0.1:2,-2:0.1:2);%生成3D网格

Z=X.^2+Y.^2;%抛物面函数

surf(X,Y,Z);%绘制曲面图

shadinginterp;%平滑着色

xlabel('X','FontSize',12);

ylabel('Y','FontSize',12);

zlabel('Z=X^2+Y^2','FontSize',12);

title('3D抛物面图','FontSize',14,'FontWeight','bold');

colormap(jet);%设置颜色映射

colorbar;%显示颜色条

%4.动态绘图(以sin(x)动态变化为例)

figure(4);

x=0:0.01:2*pi;

fori=1:length(x)

plot(x(1:i),sin(x(1:i)),'r-','LineWidth',1.5);

xlabel('x(rad)','FontSize',12);

ylabel('sin(x)','FontSize',12);

title('sin(x)动态绘图','FontSize',14,'FontWeight','bold');

ylim([-1.21.2]);%固定y轴范围

drawnow;%刷新图形

pause(0.005);%暂停0.005秒,控制动画速度

end

2.2数据分析(曲线拟合、插值、统计分析)说明:涵盖常用数据分析功能,适用于实验数据处理、建模分析,附结果可视化,便于验证准确性。matlab

%1.曲线拟合(多项式拟合,以二次拟合为例)

%模拟实验数据(含噪声)

x=0:0.1:10;

y_true=2*x.^2+3*x+1;%真实函数

y_noise=y_true+randn(size(x))*5;%添加噪声

%二次多项式拟合(polyfit:拟合,polyval:预测)

p=polyfit(x,y_noise,2);%p=[abc],对应y=a*x²+b*x+c

y_fit=polyval(p,x);

%拟合结果可视化

figure(1);

plot(x,y_noise,'ro','DisplayName','带噪声数据');

holdon;

plot(x,y_true,'b-','LineWidth',1.5,'DisplayName','真实曲线');

plot(x,y_fit,'g--','LineWidth',1.5,'DisplayName','二次拟合曲线');

xlabel('x','FontSize',12);

ylabel('y','FontSize',12);

title('多项式曲线拟合示例','FontSize',14,'FontWeight','bold');

legend('Location','best');

gridon;

holdoff;

%2.数据插值(线性插值、三次样条插值)

x_interp=0:0.5:10;

y_interp=2*x_interp.^2+3*x_interp+1;%原始稀疏数据

x_new=0:0.1:10;%新的插值点

%线性插值

y_linear=interp1(x_interp,y_interp,x_new,'linear');

%三次样条插值(更平滑)

y_spline=interp1(x_interp,y_interp,x_new,'spline');

%插值结果可视化

figure(2);

plot(x_interp,y_interp,'ro','DisplayName','原始稀疏数据');

holdon;

plot(x_new,y_linear,'b-','LineWidth',1,'DisplayName','线性插值');

plot(x_new,y_spline,'g--','LineWidth',1.5,'DisplayName','三次样条插值');

xlabel('x','FontSize',12);

ylabel('y','FontSize',12);

title('数据插值对比','FontSize',14,'FontWeight','bold');

legend('Location','best');

gridon;

holdoff;

%3.统计分析(描述性统计、假设检验)

data=[12151418161713191516];%样本数据

%描述性统计

mean_data=mean(data);%均值

std_data=std(data);%标准差

var_data=var(data);%方差

median_data=median(data);%中位数

max_data=max(data);%最大值

min_data=min(data);%最小值

range_data=range(data);%极差

%输出统计结果

fprintf('样本均值:%.2f\n',mean_data);

fprintf('样本标准差:%.2f\n',std_data);

fprintf('样本方差:%.2f\n',var_data);

fprintf('样本中位数:%.2f\n',median_data);

fprintf('样本最大值:%.2f\n',max_data);

fprintf('样本最小值:%.2f\n',min_data);

fprintf('样本极差:%.2f\n',range_data);

%假设检验(t检验,检验样本均值是否等于15)

[h,p]=ttest(data,15);

fprintf('\nt检验结果:\n');

ifh==0

fprintf('接受原假设,样本均值等于15(p值=%.4f)\n',p);

else

fprintf('拒绝原假设,样本均值不等于15(p值=%.4f)\n',p);

end

2.3图像处理基础(读取、滤波、边缘检测)说明:基于ImageProcessingToolbox,涵盖图像处理常用操作,无需复杂配置,直接替换图片路径即可运行。matlab

%1.图像读取与显示

img_path='test.jpg';%替换为自己的图片路径(相对/绝对路径均可)

img=imread(img_path);%读取图像(默认彩色图像,三维矩阵)

gray_img=rgb2gray(img);%转换为灰度图像(二维矩阵)

%显示原始图像与灰度图像

figure(1);

subplot(2,3,1);

imshow(img);

title('原始彩色图像','FontSize',12);

subplot(2,3,2);

imshow(gray_img);

title('灰度图像','FontSize',12);

%2.图像去噪(高斯滤波)

gauss_img=imgaussfilt(gray_img,2);%高斯滤波,sigma=2(值越大越模糊)

subplot(2,3,3);

imshow(gauss_img);

title('高斯滤波去噪图像','FontSize',12);

%3.边缘检测(Canny边缘检测)

edge_img=edge(gauss_img,'canny',[0.10.3]);%阈值范围[0.1,0.3]

subplot(2,3,4);

imshow(edge_img);

title('Canny边缘检测','FontSize',12);

%4.图像缩放与旋转

scale_img=imresize(img,0.5);%缩小为原来的50%

rotate_img=imrotate(img,45);%顺时针旋转45度

subplot(2,3,5);

imshow(scale_img);

title('缩放后图像(50%)','FontSize',12);

subplot(2,3,6);

imshow(rotate_img);

title('旋转45度图像','FontSize',12);

%5.图像保存

imwrite(gray_img,'gray_image.jpg');%保存灰度图像

imwrite(edge_img,'edge_image.jpg');%保存边缘检测图像

2.4Simulink基础(仿真建模,以简单控制系统为例)说明:通过MATLAB命令行自动创建Simulink模型,无需手动拖拽模块,适合快速搭建简单仿真系统。matlab

%自动创建Simulink模型(简单一阶系统仿真)

%1.新建Simulink模型并打开

new_system('FirstOrderSystem');

open_system('FirstOrderSystem');

%2.添加模块(信号源、系统、示波器)

%添加阶跃信号源(Step)

add_block('simulink/Sources/Step','FirstOrderSystem/Step',...

'Position',[5010080130]);%模块位置(x1,y1,x2,y2)

%添加一阶传递函数(TransferFcn)

add_block('simulink/Continuous/TransferFcn','FirstOrderSystem/TransferFcn',...

'Position',[150100180130]);

%设置传递函数参数(G(s)=1/(s+1))

set_param('FirstOrderSystem/TransferFcn','Numerator','1','Denominator','11');

%添加示波器(Scope)

add_block('simulink/Sinks/Scope','FirstOrderSystem/Scope',...

'Position',[250100280130]);

%3.连接模块(Step->TransferFcn->Scope)

add_line('FirstOrderSystem','Step/1','TransferFcn/1');

add_line('FirstOrderSystem','TransferFcn/1','Scope/1');

%4.设置仿真参数并运行

set_param('FirstOrderSystem','StopTime','10');%仿真停止时间10s

sim('FirstOrderSystem');%运行仿真

%5.打开示波器查看结果

open_system('FirstOrderSystem/Scope');

三、MATLAB实战案例程序(从入门到进阶)3.1案例1:学生成绩统计分析(入门级)说明:处理学生成绩数据,实现统计分析、排名、可视化,适合新手练习数据处理与基础语法。matlab

%学生成绩统计分析程序

%1.定义学生成绩数据(姓名-语文-数学-英语)

students={

'张三',85,92,88;

'李四',78,85,90;

'王五',90,88,92;

'赵六',76,80,75;

'孙七',88,95,90;

'周八',92,86,89

};

%提取成绩数据(第二列到第四列)

scores=cell2mat(students(:,2:4));

%提取姓名

names=students(:,1);

%2.成绩统计

avg_scores=mean(scores,2);%每人平均分(按行求和)

sum_scores=sum(scores,2);%每人总分

max_score=max(scores,[],2);%每人最高分

min_score=min(scores,[],2);%每人最低分

subject_avg=mean(scores,1);%每科平均分(按列求和)

%3.成绩排名(按总分降序)

[sum_scores_sorted,idx]=sort(sum_scores,'descend');

names_sorted=names(idx);

avg_scores_sorted=avg_scores(idx);

%4.结果输出

fprintf('===学生成绩统计报告===\n');

fprintf('姓名\t语文\t数学\t英语\t总分\t平均分\t最高分\t最低分\n');

fprintf('---------------------------------------------\n');

fori=1:length(students)

fprintf('%s\t%d\t%d\t%d\t%d\t%.1f\t%d\t%d\n',...

names{i},scores(i,1),scores(i,2),scores(i,3),...

sum_scores(i),avg_scores(i),max_score(i),min_score(i));

end

fprintf('\n===科目平均分===\n');

fprintf('语文:%.1f分\n',subject_avg(1));

fprintf('数学:%.1f分\n',subject_avg(2));

fprintf('英语:%.1f分\n',subject_avg(3));

fprintf('\n===成绩排名(按总分降序)===\n');

fprintf('排名\t姓名\t总分\t平均分\n');

fprintf('-------------------------\n');

fori=1:length(students)

fprintf('%d\t%s\t%d\t%.1f\n',...

i,names_sorted{i},sum_scores_sorted(i),avg_scores_sorted(i));

end

%5.成绩可视化(柱状图展示总分)

figure(1);

bar(1:length(names_sorted),sum_scores_sorted);

set(gca,'XTickLabel',cell2mat(names_sorted));

xlabel('学生姓名','FontSize',12);

ylabel('总分','FontSize',12);

title('学生总分排名柱状图','FontSize',14,'FontWeight','bold');

gridon;

3.2案例2:房价预测(进阶级,基于线性回归)说明:基于房价数据集(模拟),实现线性回归预测,涵盖数据预处理、模型训练、预测与评估,适合进阶练习。matlab

%房价预测(线性回归)程序

%1.模拟房价数据集(特征:面积、房间数;标签:房价)

rng(1);%固定随机种子,保证结果可复现

n=100;%样本数量

area=80+rand(n,1)*70;%面积(80-150㎡)

room=randi([1,4],n,1);%房间数(1-4间)

%真实房价模型:price=0.8*area+20*room+50+噪声

price=0.8*area+20*room+50+randn(n,1)*10;

%2.数据预处理(构造特征矩阵,添加常数项)

X=[ones(n,1),area,room];%特征矩阵(n×3,第一列为常数项)

y=price;%标签向量

%3.线性回归模型训练(最小二乘法)

theta=X\y;%求解回归系数(theta=[b,a1,a2],对应price=b+a1*area+a2*room)

b=theta(1);

a1=theta(2);

a2=theta(3);

%4.模型预测

y_pred=X*theta;%训练集预测值

%5.模型评估(计算均方误差MSE、决定系数R²)

mse=mean((y-y_pred).^2);%均方误差(越小越好)

r2=1-sum((y-y_pred).^2)/sum((y-mean(y)).^2);%决定系数(越接近1越好)

%6.结果输出

fprintf('===房价线性回归模型===\n');

fprintf('回归方程:房价=%.2f+%.2f×面积+%.2f×房间数\n',b,a1,a2);

fprintf('均方误差(MSE):%.2f\n',mse);

fprintf('决定系数(R²):%.4f\n',r2);

%7.结果可视化(实际房价vs预测房价)

figure(1);

scatter(1:n,y,50,'r','filled','DisplayName','实际房价');

holdon;

plot(1:n,y_pred,'b-','LineWidth',1.5,'DisplayName','预测房价');

xlabel('样本序号','FontSize',12);

ylabel('房价(万元)','FontSize',12);

title('实际房价与预测房价对比','FontSize',14,'FontWeight','bold');

legend('Location','best');

gridon;

holdoff;

%8.新样本预测(示例:面积120㎡,3间房)

new_area=120;

new_room=3;

new_X=[1,new_area,new_room];

new_price=new_X*theta;

fprintf('\n新样本预测:面积%d㎡,%d间房,预测房价:%.2f万元\n',new_area,new_room,new_price);

3.3案例3:图像降噪与边缘检测(提高级)说明:结合图像处理核心功能,实现完整的图像预处理流程,适用于工业检测、图像分析等场景。matlab

%图像降噪与边缘检测完整流程

%1.读取带噪声图像(替换为自己的图像路径)

img_path='noisy_image.jpg';

img=imread(img_path);

gray_img=rgb2gray(img);%转换为灰度图像

%2.图像降噪(组合滤波:高斯滤波+中值滤波,效果更优)

gauss_img=imgaussfilt(gray_img,1.5);%高斯滤波去高斯噪声

med_img=medfilt2(gauss_img,[33]);%中值滤波去椒盐噪声

%3.边缘检测(Canny边缘检测,优化阈值)

edge_img=edge(med_img,'canny',[0.150.35]);%调整阈值增强边缘

%4.边缘优化(膨胀操作,使边缘更清晰)

se=strel('disk',1);%结构元素(圆盘形,半径1)

edge_opt=imdilate(edge_img,se);%膨胀操作

%5.结果可视化(多图对比)

figure(1);

subplot(2,3,1);

imshow(img);

title('原始带噪声图像','FontSize',12);

subplot(2,3,2);

imshow(gray_img);

title('灰度图像','FontSize',12);

subplot(2,3,3);

imshow(gauss_img);

title('高斯滤波后','FontSize',12);

subplot(2,3,4);

imshow(med_img);

title('组合滤波后(降噪完成)','FontSize',12);

subplot(2,3,5);

imshow(edge_img);

title('Canny边缘检测','FontSize',12);

subplot(2,3,6);

imshow(edge_opt);

title('边缘优化

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论