人工智能典型例题MATLAB仿真实验报告
4)MATLAB实验报告

4)MATLAB实验报告MATLAB实验报告一、引言MATLAB是一种强大的数学软件,广泛应用于科学研究、工程设计和数据分析等领域。
本实验报告旨在介绍使用MATLAB进行数据处理和可视化的基本方法,并通过实例展示其应用。
二、数据处理1. 数据导入与读取在MATLAB中,可以使用load函数或importdata函数导入外部数据文件。
load函数适用于导入MATLAB格式的数据文件,而importdata函数可以导入多种格式的数据文件,如文本文件、Excel文件等。
2. 数据清洗与转换数据清洗是指对原始数据进行去除异常值、缺失值填充等处理,以保证数据的准确性和完整性。
MATLAB提供了丰富的函数和工具箱,如统计工具箱、优化工具箱等,可以方便地进行数据清洗和转换操作。
3. 数据分析与建模MATLAB具有强大的数学和统计分析功能,可以进行数据的描述性统计、回归分析、时间序列分析等。
通过使用相关函数和工具箱,可以对数据进行深入分析,并建立相应的数学模型。
三、数据可视化1. 统计图表MATLAB提供了丰富的绘图函数和工具箱,可以绘制各种统计图表,如直方图、散点图、箱线图等。
这些图表可以直观地展示数据的分布、关系和趋势,有助于更好地理解和解释数据。
2. 三维可视化除了二维图表外,MATLAB还支持三维数据的可视化。
通过使用plot3函数、mesh函数等,可以将三维数据以曲线、曲面等形式展示出来,进一步提供对数据的深入理解。
3. 动态可视化MATLAB还支持动态可视化,即通过动画或交互式图形来展示数据的变化过程。
通过使用animate函数、interactiveplot函数等,可以将数据的变化以动态的方式展示出来,增加数据分析和呈现的趣味性。
四、实例应用以某电商平台销售数据为例,展示如何使用MATLAB进行数据处理和可视化。
首先,导入销售数据文件,清洗数据,去除异常值和缺失值。
然后,通过统计分析,计算销售额、销量、平均价格等指标,并绘制相应的统计图表。
(最新版)MATLAB实验报告

(最新版)MATLAB实验报告实验一典型环节的MATLAB仿真一、实验目的1.熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法。
2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节响应曲线的理解。
3.定性了解各参数变化对典型环节动态特性的影响。
二、SIMULINK的使用MATLAB中SIMULINK是一个用来对动态系统进行建模、仿真和分析的软件包。
利用SIMULINK功能模块可以快速的建立控制系统的模型,进行仿真和调试。
1.运行MATLAB软件,在命令窗口栏“>>”提示符下键入simulink命令,按Enter 键或在工具栏单击按钮,即可进入如图1-1所示的SIMULINK仿真环境下。
2.选择File菜单下New下的Model命令,新建一个simulink 仿真环境常规模板。
3.在simulink仿真环境下,创建所需要的系统。
以图1-2所示的系统为例,说明基本设计步骤如下:1)进入线性系统模块库,构建传递函数。
点击simulink下的“Continuous”,再将右边窗口中“Transfer Fen”的图标用左键拖至新建的“untitled”窗口。
2)改变模块参数。
在simulink仿真环境“untitled”窗口中双击该图标,即可改变传递函数。
其中方括号内的数字分别为传递函数的分子、分母各次幂由高到低的系数,数字之间用空格隔开;设置完成后,选择OK,即完成该模块的设置。
3)建立其它传递函数模块。
按照上述方法,在不同的simulink 的模块库中,建立系统所需的传递函数模块。
例:比例环节用“Math”右边窗口“Gain”的图标。
4)选取阶跃信号输入函数。
用鼠标点击simulink下的“Source”,将右边窗口中“Step”图标用左键拖至新建的“untitled”窗口,形成一个阶跃函数输入模块。
5)选择输出方式。
用鼠标点击simulink下的“Sinks”,就进入输出方式模块库,通常选用“Scope”的示波器图标,将其用左键拖至新建的“untitled”窗口。
matlab仿真实验报告

matlab仿真实验报告Matlab仿真实验报告引言:Matlab是一种广泛应用于科学和工程领域的数值计算软件,它提供了强大的数学和图形处理功能,可用于解决各种实际问题。
本文将通过一个具体的Matlab 仿真实验来展示其在工程领域中的应用。
实验背景:本次实验的目标是通过Matlab仿真分析一个电路的性能。
该电路是一个简单的放大器电路,由一个输入电阻、一个输出电阻和一个放大倍数组成。
我们将通过Matlab对该电路进行仿真,以了解其放大性能。
实验步骤:1. 定义电路参数:首先,我们需要定义电路的各个参数,包括输入电阻、输出电阻和放大倍数。
这些参数将作为Matlab仿真的输入。
2. 构建电路模型:接下来,我们需要在Matlab中构建电路模型。
可以使用电路元件的模型来表示电路的行为,并使用Matlab的电路分析工具进行仿真。
3. 仿真分析:在电路模型构建完成后,我们可以通过Matlab进行仿真分析。
可以通过输入不同的信号波形,观察电路的输出响应,并计算放大倍数。
4. 结果可视化:为了更直观地观察仿真结果,我们可以使用Matlab的图形处理功能将仿真结果可视化。
可以绘制输入信号波形、输出信号波形和放大倍数的变化曲线图。
实验结果:通过仿真分析,我们得到了以下实验结果:1. 输入信号波形与输出信号波形的对比图:通过绘制输入信号波形和输出信号波形的变化曲线,我们可以观察到电路的放大效果。
可以看到输出信号的幅度大于输入信号,说明电路具有放大功能。
2. 放大倍数的计算结果:通过对输出信号和输入信号的幅度进行计算,我们可以得到电路的放大倍数。
通过比较不同输入信号幅度下的输出信号幅度,可以得到放大倍数的变化情况。
讨论与分析:通过对实验结果的讨论和分析,我们可以得出以下结论:1. 电路的放大性能:根据实验结果,我们可以评估电路的放大性能。
通过观察输出信号的幅度和输入信号的幅度之间的比值,可以判断电路的放大效果是否符合设计要求。
人工智能实验报告1

南京信息工程大学 实验(实习)报告 实验(实习)名称 MATLAB 编程 实验日期得分 指导教师 系 计科 专业 年级 班次 <> 姓名 学号一、实验目的:(1)通过学习MA TLAB 编程来进一步了解人工智能; (2)通过上机实习编写MATLAB 程序,从而对MA TLAB 有所基本了解。
为更好地学习人工智能知识打下基础。
二、实验内容:(1)编写程序,计算1+3+5+7+…+(2n+1)的值(用input 语句输入n 值)。
(2)编写分段函数⎪⎩⎪⎨⎧≤≤-<≤=)(0)21(2)10()(其他x x x x x f 的函数文件,存放于文件ff.m 中,计算出)3(-f 、)2(f 、)(∞f 的值。
三、实验步骤:(1)打开MATLAB 软件,首先在D 盘下新建一个MATLAB 文件夹,然后把工作路径设置到这个文件夹,如所示。
(2)在菜单栏选择【File 】>>【New 】>>【M-File 】新建*.M 的文件,然后在新建的文件中进行程序的编写。
(3)第1题的实验代码如下:实验结果如下:(4)第2题实验代码如下:实验结果如下:四、实验结论:(1)存在问题一开始对MATLAB语言还不是很熟悉,但通过上级实习遇到的一些问题帮助我们更好的学习了MATLAB,而且它与C语言虽然在思想上差不多但语法实现上还是有区别的。
(2)认识体会MATLAB 作为一种高级科学计算软件,是进行算法开发、数据可视化、数据分析以及数值计算的交互式应用开发环境,并且是一门实践性非常强的课程。
要学好MATLAB程序设计,上机实践是十分重要的环节,只有通过大量的上机实验,才能真正掌握MA TLAB程序设计。
Matlab仿真实验报告

Matlab仿真实验报告姓名:黄涛学号:2011302540056学院:电气工程学院[在此处键入文档的摘要。
摘要通常是对文档内容的简短总结。
在此处键入文档的摘要。
摘要通常是对文档内容的简短总结。
]实验一直流电路一实验目的1、加深对直流电路的节点电压法和网孔电流法的理解。
2、学习MATLAB的矩阵运算方法。
二、实验内容:1、电阻电路的计算如图,已知:R1=2,R2=6,R3=12,R4=8,R5=12,R6=4,R7=2.(1) 如Us=10V,求i3,u4,u7;(2) 如U4=4V,求Us,i3,i7.(1)Z = [20 -12 0;-12 32 -12;0 -12 18];V = [10 0 0]';I = inv(Z)*V;i3 = I(1)-I(2);u4 = 8*I(2);u7 = 2*I(3);fprintf('i3=%f \n',i3)fprintf('u4=%f \n',u4)fprintf('u7=%f \n',u7)仿真结果:i3=0.357143u4=2.857143u7=0.476190(2)Z = [0 8 0;-12 32 -12;0 -12 18];V = [4 0 0]';I = inv(Z)*V;Us = 20*I(1)-12*I(2);i3 = I(1)-I(2);i7 = I(3);fprintf('Us=%f \n',Us)fprintf('i3=%f \n',i3)fprintf('i7=%f \n',i7)仿真结果:Us=14.000000i3=0.500000i7=0.3333332、求解电路里的电压,例如V1,V2,……V5.Y = [1 -1 2 -2 0;0 5 -13 8 0;2 0 4 -11 0;176 -5 5 -196 0;0 0 0 0 1];I = [0 -200 -120 0 24]';V = inv(Y)*I;fprintf('V1=%fV\nV2=%fV\nV3=%fV\nV4=%fV\nV5=%fV\n',V(1),V(2),V(3),V(4),V(5))仿真结果:V1=117.479167VV2=299.770833VV3=193.937500VV4=102.791667VV5=24.000000V3、如图,已知R1=R2=R3=4,R4=2,控制常数k1=0.5,k2=4,is=2,求i1和i2.Z = [1 0 0 0;-4 16 -8 -4;0 0 1 0.5;0 -8 4 6];V = [2 0 0 0]';I = inv(Z)*V;i1 = I(2)-I(3);i2 = I(4);fprintf('i1=%f V\ni2=%f V\n',i1,i2)仿真结果:i1=1.000000 Vi2=1.000000 V三、实验总结Matlab可用于计算矩阵,方便电路分析过程中的计算。
自动实验一——典型环节的MATLAB仿真报告

自动实验一——典型环节的MATLAB仿真报告引言:典型环节的MATLAB仿真是一种常见的模拟实验方法,通过使用MATLAB软件进行建模和仿真,可以有效地研究和分析各种复杂的物理系统和控制系统。
本报告将介绍一个典型环节的MATLAB仿真实验,包括实验目的、实验原理、实验步骤、实验结果和讨论等内容。
一、实验目的本实验旨在通过MATLAB仿真实验,研究和分析一个典型环节的动态特性,深入了解其响应规律和控制方法,为实际系统的设计和优化提供理论支持。
二、实验原理典型环节是控制系统中的重要组成部分,一般包括惯性环节、惯性耦合和纯滞后等。
在本实验中,我们将重点研究一个惯性环节。
惯性环节是一种常见的动态系统,其特点是系统具有自身的动态惯性,对输入信号的响应具有一定的滞后效应,并且在输入信号发生变化时有一定的惯性。
三、实验步骤1.建立典型环节的数学模型。
根据实际情况,我们可以选择不同的数学模型描述典型环节的动态特性。
在本实验中,我们选择使用一阶惯性环节的传递函数模型进行仿真。
2.编写MATLAB程序进行仿真。
利用MATLAB软件的控制系统工具箱,我们可以方便地建立惯性环节的模型,并利用系统仿真和分析工具进行仿真实验和结果分析。
3.进行仿真实验。
选择合适的输入信号和参数设置,进行仿真实验,并记录仿真结果。
4.分析实验结果。
根据仿真结果,可以分析典型环节的动态响应特性,比较不同输入信号和控制方法对系统响应的影响。
四、实验结果和讨论通过以上步骤,我们成功地完成了典型环节的MATLAB仿真实验,并获得了仿真结果。
通过对仿真结果的分析,我们可以得到以下结论:1.惯性环节的响应规律。
惯性环节的响应具有一定的滞后效应,并且对输入信号的变化具有一定的惯性。
随着输入信号的变化速度增加,惯性环节的响应时间呈指数级减小。
2.稳态误差与控制增益的关系。
控制增益对稳态误差有重要影响,适当调整控制增益可以减小稳态误差。
3.不同输入信号的影响。
matlab仿真实验报告,Matlab仿真及其应用实验报告.doc

matlab仿真实验报告,Matlab仿真及其应⽤实验报告.doc Matlab仿真及其应⽤ 实验报告温州⼤学物理与电⼦信息⼯程学院Matlab仿真及其应⽤ 实验报告课程名称:Matlab仿真及其应⽤班 级:10电信姓名:吴** 学号:1011000****实验地点:5B305⽇期:12.25实验⼆ Matlab 基本编程基础[实验⽬的和要求]熟悉MATLAB环境与⼯作空间熟悉变量与矩阵的输⼊、矩阵的运算熟悉M⽂件与M函数的编写与应⽤熟悉MATLAB控制语句与逻辑运算掌握if语句、switch语句、try语句的使⽤。
掌握利⽤for语句、while语句实现循环结构的⽅法。
[实验内容]1⾏100列的Fibonacc 数组a,a(1)=a(2)=1,a(i)=a(i-1)+a(i-2),⽤for循环指令来寻求该数组中第⼀个⼤于10000的元素,并之处其位置i。
编写M函数表⽰曲线以及它的包络线,并从命令窗⼝输⼊命令语句绘制曲线。
t的取值范围是[0,4π]。
设,编写⼀个M函数⽂件,使得调⽤f(x)时,x可⽤矩阵代⼊,得出的f(x)为同阶矩阵。
根据,求时的最⼤n值;与(1)的n值对应的y值。
已知求中,最⼤值、最⼩值、各数之和,以及正数、零、负数的个数。
输⼊⼀个百分制成绩,要求输出成绩等级A,B,C,D,E。
其中,90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
求分段函数的值。
⽤if语句实现输出x=-5.0, -3.0, 1.0, 2.0, 2.5, 3.0, 5.0时的y值。
编写⼀M函数,实现近似计算指数,其中x为函数参数输⼊,当n+1步与n步的结果误差⼩于0.00001时停⽌。
编写⼀M函数,a和x作为M函数参数输⼊,函数⾥⾯分别⽤if结构实现函数表⽰实验结果及分析:1.a=ones(1,100); %定义数组for i=3:100a(i)=a(i-1)+a(i-2);if(a(i)>10000)a(i),break;endend ,i2.function y=ff(t)y1=exp(-t/3);y2=exp(-t/3).*sin(3*t); y=[y1;y2]3.function y=f(x);a=input('输⼊a值:');x=input('输⼊x值:');if(x<=-a)y=-1;elseif(x-a)y=x/a;elsey=1;endend4.for n=1:100f(n)=1./(2*n-1);y=sum(f)if y>=3my=y-f(n)breakendendmy5.f(1)=1,f(2)=0,f(3)=1; for n=4:100f(n)=f(n-1)-2*f(n-2)+f(n-3);enda=sum(f);b=max(f);c=min(f);p=f==0,d=sum(p);%p等于f为0的个数p1=f>0,e=sum(p1);p2=f<0,f=sum(p2);a,b,c,d,e,f6.clear;n=input('输⼊成绩:');m=floor(n/10);%取整switch mcase num2cell(9:10)disp('A'); %显⽰在控制框case 8disp('B');case 7disp('C');case 6disp('D');case num2cell(0:5)disp('E');otherwisedisp('error')end7.function y=ex3_4(x)for i=1:length(x)if (x(i)<0)&(x(i)~=-3)y(i)=x(i)^2+x(i)-6elseif (x(i)>=0)&(x(i)<5)&(x(i)~=2)&(x(i)~=3) y(i)=x(i)^2-5*x(i)+6else y(i)=x(i)^2-x(i)-1 endendy8.function t=ex3_4(x) n=0;t=1;y=1;x=input(‘’);while y>=0.00001n=n+1;y=x^n/factorial(n);t=t+y;endn9.function y=f(x);a=input('输⼊a值:'); x=input('输⼊x值:'); if。
Matlab实验报告(1)

《Matlab语言与应用》课程实验报告*名:**班级:电信114学号:************指导老师:***二〇一三年十一月二十一日Matlab实验报告实验一一、实验问题求[12 + sin(2)×( 22 −4)]÷3^2的算术运算结果。
二、问题的分析该题主要熟悉Matlab环境下的对数学运算的熟悉,如何输入数据、建立函数输出结果。
三、上机实验结果如图四、实验的总结与体会通过本次实验,我学会了用Matlab来计算数学运算中的复杂技术。
我们也可以自己编写一个可以调用的函数,首先我们要了解Matlab语言函数的基本结构,结构如下:Function [返回变量列表]=函数名(输入变量列表)注释说明语句段,由%引导输入、返回变量格式的检测函数体语句例如:输入变量为k,返回的变量为m和s,其中s为前m项的和Function [m,s]=findsum(k)s=0;m=0;while(s<=k),m=m+1;s=s+m;end编写了函数,就可以将其存为findsum.m文件,这样就可以在Matlab环境中对不同的k值调用该函数了。
这样就可以灵活的实现我们想要的数据。
实验二一、实验问题二、问题分析输入矩阵时,空格或逗号表示间隔,分号表示换行,比如上面的矩阵A应写为A=[1,2,3;4,5,6;7,8,9]三、上机实验结果如图四、实验的总结与体会通过对本次上机实验了解到在Matlab中对矩阵的代数运算矩阵转置、矩阵的加减法运算、矩阵乘法、矩阵的左、右除、矩阵翻转、矩阵乘方运算、点运算等。
实验三一、实验要求画图,理解plot函数用法二、代码如下clear; clf;t=0:pi/20:2*pi;R=5;x=R*sin(t); y=R*cos(t);plot(x,y,'b:'), gridhold onrrr=[x;y;x+y];plot(rrr(1,:),'.','MarkerSize',10,'Color','r')plot(rrr(2,:),rrr(3,:),'o','MarkerSize',15,'Color','b'); axis([-8,20,-8,8]), % axis squarehold off三、Matlab运行结果如图实验四一、实验要求二、代码如下t=0:pi/50:4*pi;y0=exp(-t/3);y=exp(-t/3).*sin(3*t);plot(t,y,'-r',t,y0,':b',t,-y0,':b') Grid三、Matlab运行结果如图实验五一、实验要求傅里叶频谱分析二、代码及分析(1)首先生成数据,包含50Hz和120Hz频率的正弦波x >>t = 0:.001:.25;>>x = sin(2*pi*50*t) + sin(2*pi*120*t);(2)再生成噪音信号yy = x + 2*randn(size(t));plot(y(1:50))title('Noisy time domain signal')(3)对y进行快速傅里叶变换Y = fft(y,256);(4)计算功率谱Pyy = Y.*conj(Y)/256;f = 1000/256*(0:127);plot(f,Pyy(1:128))title('Power spectral density')xlabel('Frequency (Hz)')(5)只查看200Hz以下频率段plot(f(1:50),Pyy(1:50))title('Power spectral density')xlabel('Frequency (Hz)')三、上机结果如下图实验六一、实验要求FIR数字滤波器设计代码如下clear;close allf=[0,0.6,0.6,1]; m=[0,0,1,1]; % 设定预期幅频响应b=fir2(30,f,m); n=0:30; % 设计FIR 数字滤波器系数subplot(3,2,1),stem(n,b,'.')xlabel('n'); ylabel('h(n)');axis([0,30,-0.4,0.5]),line([0,30],[0,0])[h,w]=freqz(b,1,256);subplot(3,2,2),plot(w/pi,20*log10(abs(h)));gridaxis([0,1,-80,0]),xlabel('w/pi'); ylabel('幅度(dB)');二、上级结果如图实验七二、实验要求用guide实验一个简单的加减乘除计算器二、实验步骤在命令行输入guide命令,进入guide界面新建一个空白guide文件在空白文件中设置好功能模块如图模块建立好后,就要把编写好的加减乘除代码加入到各自的回调函数中,见下图两个被加数代码如下图加模块代码如下图减模块代码如下图乘模块代码如下图除模块代码如下图各模块的回调函数加完后就可以运行了,运行结果如下图总结:Matlab一个高级的距阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
研究生(人工智能)报告题目:人工智能实验报告学号姓名专业电磁场与微波技术指导教师院(系、所)华中科技大学研究生院制1问题二利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。
请定义必要的谓词,列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。
图1 猴子香蕉问题解:⏹定义描述环境状态的谓词。
AT(x,w):x在t处,个体域:xϵ{monkey},wϵ{a,b,c,box};HOLD(x,t):x手中拿着t,个体域:tϵ{box,banana};EMPTY(x):x手中是空的;ON(t,y):t在y处,个体域:yϵ{b,c,ceiling};CLEAR(y):y上是空的;BOX(u):u是箱子,个体域:uϵ{box};BANANA(v):v是香蕉,个体域:vϵ{banana};⏹使用谓词、连结词、量词来表示环境状态。
问题的初始状态可表示为:S o:AT(monkey,a)˄EMPTY(monkey)˄ON(box,c)˄ON(banana,ceiling)˄CLEAR(b)˄BOX(box)˄BANANA(banana)要达到的目标状态为:S g:AT(monkey,box)˄HOLD(monkey,banana)˄ON(box,b)˄CLEAR(ceiling)˄CLEAR(c)˄BOX(box)˄BANANA(banana)⏹ 从初始状态到目标状态的转化, 猴子需要完成一系列操作, 定义操作类谓词表示其动作。
WALK(m,n):猴子从m 走到n 处,个体域:m,n ϵ{a,b,c};CARRY(s,r):猴子在r 处拿到s ,个体域:r ϵ{c,ceiling},s ϵ{box,banana}; CLIMB(u,b):猴子在b 处爬上u ;这3个操作也可分别用条件和动作来表示。
条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。
动作通过前后状态的变化表示,即通过从动作前删除或增加谓词公式来描述动作后的状态。
WALK(m,n):猴子从m 走到n 处 条件:AT(monkey,m) 动作:⎩⎨⎧),(),(n monkey AT m monkey AT 增加:删除:CARRY(s,r):猴子在r 处拿到s条件:AT(monkey,r)˄EMPTY(monkey)˄ON(s,r)˄BOX(box)˄BANANA(banana) 动作:⎩⎨⎧∧∧)(),(),()(r CLEAR s monkey HOLD r s ON monkey EMPTY 增加:删除:CLIMB(u,b):猴子在b 处爬上u条件:AT(monkey,b)˄HOLD(monkey,u)˄CLEAR(b)˄BOX(box)˄BANANA(banana)动作:⎩⎨⎧∧∧∧),()(),()(),(),(c u ON monkey EMPTY u monkey AT c CLEAR u monkey HOLD b monkey AT 增加:删除:⏹ 按照行动计划, 一步步进行状态替换, 直至目标状态。
AT(monkey,a)˄EMPTY(monkey)˄ON(box,c)˄ON(banana,ceiling)˄CLEAR(b)˄BOX(box)˄BANANA(banana)n c m a c a WALK 代换用代换用,),(⇓AT(monkey,c)˄EMPTY(monkey)˄ON(box,c)˄ON(banana,ceiling)˄CLEAR(b)˄BOX(box)˄ BANANA(banana)r box s c box c CARRY 代换用代换用,),(⇓AT(monkey,c)˄HOLD(monkey,box)˄ON(banana,ceiling)˄CLEAR(b)˄CLEAR(c)˄BOX(box)˄BANANA(banana)nbmcbcWALK代换用代换用,),(⇓AT(monkey,b)˄HOLD(monkey,box)˄ON(banana,ceiling)˄CLEAR(b)˄CLEAR(c)˄BOX(box)˄BANANA(banana)uboxbboxCLIMB代换用),(⇓AT(monkey,box)˄EMPTY(monkey)˄ON(box,b)˄ON(banana,ceiling)˄CLEAR(c)˄BOX(box)˄BANANA(banana)rceilingsbananaceilingbananaCARRY代换用代换用,),(⇓AT(monkey,box)˄HOLD(monkey,banana)˄ON(box,b)˄CLEAR(ceiling)˄CLEAR(c)˄BOX(bo x)˄BANANA(banana)(目标得解)猴子行动的规则序列是:WALK(a,c)→CARRY(c,box)→WALK(c,b)→CLIMB(box,b)→CARRY(banana,ceiling)当猴子执行某一个操作之前,需要检查当前状态是否可使所要求的条件得到满足,即证明当前状态是否蕴涵操作所要求的状态的过程。
在行动过程中,检查条件的满足性后才进行变量的代换。
代入新条件后的新状态如果是目标状态,则问题解决;否则看是否满足下面的操作,如果不满足或即使满足却又回到了原来的状态,那么代入无效。
#include <stdio.h>struct State{int monkey; /*-1:Monkey at A;0: Monkey at B;1:Monkey at C;*/int box; /*-1:box at A;0:box at B;1:box at C;*/int banana; /*Banana at B,Banana=0*/int monbox; /*-1: monkey on the box;1: monkey the box;*/};struct State States [150];char* routesave[150];/*function monkeygoto,it makes the monkey goto the other place*/void monkeygoto(int b,int i){int a;a=b;if (a==-1){routesave[i]="Monkey go to A";States[i+1]=States[i];States[i+1].monkey=-1;}else if(a==0){routesave[i]="Monkey go to B";States[i+1]=States[i];States[i+1].monkey=0;}else if(a==1){routesave[i]="Monkey go to C";States[i+1]=States[i];States[i+1].monkey=1;}else{printf("parameter is wrong"); }}/*end function monkeyygoto*//*function movebox,the monkey move the box to the other place*/void movebox(int a,int i){int B;B=a;if(B==-1){routesave[i]="monkey move box to A";States[i+1]=States[i];States[i+1].monkey=-1;States[i+1].box=-1;}else if(B==0){routesave[i] = "monkey move box to B";States[i+1]=States[i];States[i+1].monkey=0;States[i+1].box=0;}else if(B==1){routesave[i] = "monkey move box to C";States[i+1]=States[i];States[i+1].monkey=1;States[i+1].box=1;}else{printf("parameter is wrong");}}/*end function movebox*//*function climbonto,the monkey climb onto the box*/void climbonto(int i){routesave[i]="Monkey climb onto the box";States[i+1]=States[i];States[i+1].monbox=1;}/*function climbdown,monkey climb down from the box*/void climbdown(int i){routesave[i]="Monkey climb down from the box";States[i+1]=States[i];States[i+1].monbox=-1;}/*function reach,if the monkey,box,and banana are at the same place,the monkey reach banana*/void reach(int i){routesave[i]="Monkey reach the banana"; }/*output the solution to the problem*/void showSolution(int i){int c;printf ("%s \n", "Result to problem:");for(c=0; c<i+1; c++){printf ("Step %d : %s \n",c+1,routesave[c]);}printf("\n");}/*perform next step*/void nextStep(int i){int c;int j;if(i>=150){printf("%s \n", "steplength reached 150,have problem ");return;}for (c=0; c<i; c++) /*if the current state is same to previous,retrospect*/{if(States[c].monkey==States[i].monkey&& States[c].box==States[i].box&&States[c].banana ==States[i].banana&&States[c].monbox==State s[i].monbox){return;}}if(States[i].monbox==1&&States[i].monkey==0 &&States[i].banana==0&&States[i].box==0) {showSolution(i);printf("Press any key to continue \n");getchar();/*to save screen for user,press any key to continue*/return;}j=i+1;if(States[i].monkey==0){if(States[i].box==0){if(States[i].monbox==-1){climbonto(i);reach(i+1);nextStep(j);/*monkeygoto(-1,i);nextStep(j);monkeygoto(0,i);nextStep(j);movebox(-1,i);nextStep(j);movebox(0,i);nextStep(j);*/}else{reach(i+1);nextStep(j);/*climbdown(i);nextStep(j);*/}}else if(States[i].box==1){/*monkeygoto(-1,i);nextStep(j);*/monkeygoto(1,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else /*box==-1*/{monkeygoto(-1,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}/*end if*/if(States[i].monkey==-1){if(States[i].box==-1){if(States[i].monbox==-1){movebox(0,i);.nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{climbdown(i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}else if(States[i].box==0){monkeygoto(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{monkeygoto(1,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}/*end if*/if(States[i].monkey==1){if (States[i].box==1){if(States[i].monbox==-1){movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{climbdown(i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}else if(States[i].box==-1){monkeygoto(-1,i);nextStep(j);movebox(0,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}else{monkeygoto(0,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);}}/*end if*/}/*end nextStep*/int main(){States[0].monkey=-1;States[0].box=1; States[0].banana=0; States[0].monbox=-1;nextStep(0); }2问题三求解函数逼近问题有21组单输入矢量P和相对应的目标矢量T,试采用Matlab设计神经网络来实现这对数组的函数关系。