ANN

5 visualizzazioni (ultimi 30 giorni)
Malathy
Malathy il 29 Feb 2012
Risposto: xiao li il 1 Lug 2021
I used the command newff(input,output,10). 10 - no. of neurons in the hidden layer. To assess the performance of the ANN, Pl. help me How to find the correlation coefficient, average%error and RMSE of the network.

Risposte (1)

xiao li
xiao li il 1 Lug 2021

%% 程序设计题(不能用自matlab带函数);
%% 运行程序时要输文件名()
%% 1.计算n!
%函数版
function [f]=call(n)
f=1;
for m=1:n
f=f*m; %for语句循环,m的范围是1~n,依次乘以1~n一直到最后一项
end
end

%% 2.计算y=1+2+3+...+n的值
function [y]=cal2(n)
y=0;
for m=1:n
y=y+m; % y从0开始,for语句循环,一直加到n结束
end

%% 3.求ax^2+bx+c=0方程的解
function [y] = cal3(a,b,c)
disp(['方程:',num2str(a),'*x^2+',num2str(b),'*x+',num2str(c)])
if a==0; %注意这里赋值要用“==”,否则程序不运行
x=-c/b;
disp(['根为:x=',num2str(x)]) % num2str将数值转化成字符串
elseif b^2+4*a*c>0
x1=(-b+sqrt(b^2-4*a*c))/(2*a);
x2=(-b-sqrt(b^2-4*a*c))/(2*a);
disp(['根为:x1=',num2str(x1), ' x2=',num2str(x2)])
elseif b^2+4*a*c==0;
x=-b/(2*a);
disp(['根为:x1=x2=',num2str(x)])
else
disp(['无解'])
end

end

%% 4.编写程序判定给定数m是否是素数
function [p] = cal4(m)
for a=2:m-1
if 0==rem(m,a) %求余函数
disp(['非素数'])
break;
elseif a==m-1 %这里必须要有一个条件,后面的结果是必然的,
%只要放上一个必然条件使之匹配成功即可
%其余的else都不会再尝试
disp(['素数'])
end
end

%% 5.编写程序求1000至9999之间的回文数,回文数是指正读和反读都一样的数
data=[];%建立一个空矩阵,以便存放数据
%回文数保持第一位与第四位相同,第二位与第三位相同
clc;clear;
result=[]
for i=1000:1000:9999;
j=0:9;
n=i+j*100+j*10+i/1000
result=[result,n];%将每一次循环得出的数据依次放入data矩阵中,可在工作区查看
end

%% 6.编写程序求1-1/2+1/3-1/4+...+1/n-1-1/n的值
function [y] = cal4(n)
y=0;
for m=1:n
y=y+(-1)^(m+1)*(1/m);
end
end
%% 7.编写程序求两个数的最大公约数和最小公倍数
clc;clear;
function [] = text1(a,b)
%求a,b两个数的最大公约数和最小公倍数
if a>b
tem=b;%把两个数中最小的值赋给tem
else tem=a;
end
for n=tem:-1:1 %进行步长为1的倒叙循环,保证求得的公约数是最大的
c=rem(b,n); %rem 取余函数
d=rem(a,n);
%c和d分别是a、b除以m的余数,c、d同时为零时,m即最大公约数
if c==0&d==0
disp(['最大公约数为:',num2str(n)])
break
end
end
m=a*b/n;% m为最小公倍数;两个数的最大公约数与最小公倍数之间的条件是a*b=m*n
disp(['最小公倍数为:',num2str(m)])
end
%% 8.编写程序求斐波那契数列的前n项
function [] = text1(n)
%斐波那契数列,前两项之和等于第三项
%f(n)=f(n-1)+f(n-2)
%第一项和第二项分别都是1
%f(1)=1,f(2)=1
% 程序主题
if n==1
fib=0;
elseif n==2
fib=[0,1];%对数列前两项进行赋值,并放到1行n列矩阵中
else
fib=[0 1 zeros(1,n-2)];
for i=3:n %从第三项开始,满足值等于前两项之和
fib(i)=fib(i-1)+fib(i-2);
end
end
disp(['前',num2str(n),'项斐波那契数列的值为:',num2str(fib)]) %输出结果
end

%% 9.编写程序实现1-n(n>100),同时满足4的倍数和6的倍数的所有数,并列出
function [] = xx(n)
%

if n<=100
disp(['n不满足要求'])
else
data=[];%建立一个矩阵,方便之后将满足条件的值放进去
for i=1:n;
if (rem(i,4)==0&&rem(i,6)==0)%既是4的倍数,又是6的倍数
data=[data,i];

end
end
disp(['满足条件的数为:',num2str(data)])
%最后结果存放在工作区ans内,如果function里面有data
end
%% 10.编写程序将一个正整数n分解质因数,如40=2*2*2*5.
%% 思路
% 先找到一个最小的质数2
%如果这个质数恰好等于n,分解质因数的过程已经结束,输出结果
%如果n不等于k,则输出k的值,用n除以k的上,作为新的正整数n,重复执行上一行过程
n=input('请输入一个数:');
m=2;

disp([num2str(n),'='])

while(1)
% while(1)其中1代表一个常量表达式,永远不等于0,除非设置break等跳出循环语句,循环才会停止
if(~mod(n,m)) % 找到可以整除的数
k=m;
if (n==k) %找到最后一个质数
disp([num2str(n)])
break %跳出循环
else

n=n/k; % 将n除以质数的值继续循环
m=1; %保证循环的质数还是从2开始
disp([num2str(k),'*']) % 将分解的质数显示出来
fprintf('%c%c','*', 8, 8);%删掉两个换行符,使disp输出的结果在同一行
% fprintf('end\n');
end
end
m=m+1;


end

%% 数据处理题
%要求:1.可以修改两个Excel的文件格式,但不能修改文件里面的内容
%尤其是不能把文件中的某些内容改成数字0和1等
%2.必须以脚本文件的格式存储输入命令,直接在命令窗口显示无效。

%% 1.导入Prize1.xlsx数据,并统计各专业人数。
clc;clear;
[num1,txt1]=xlsread('Prize1.xlsx','Sheet1');%导入Prize中第一个工作薄
tabulate(txt1(2:14,5)) %分类统计

%% 2.导入Prize1.xlsx数据,并统计2016级申请奖学金人数
clc;clear;
[num1]=xlsread('Prize1.xlsx','Sheet1');
A=size(num1(:,1),1); %统计行的个数
disp(['2016级申请奖学金的人数为:',num2str(A),'人'])

%% 3.导入Prize1.xlsx和Prize2.xlsx数据,统计申请两个奖学金的总人数
clc;clear;
%导入数据
[num1]=xlsread('Prize1.xlsx','Sheet1');
[num2]=xlsread('Prize2.xlsx','Sheet1');
n=size(union(num1(:,1),num2(:,1)),1);
%分别拿出序号数据并合并(因为有重合人数所以求并集)
disp(['申请两个奖学金的总人数为:',num2str(n),'人'])

%% 4.导入Prize1.xlsx和Prize2.xlsx数据,给出只申请第二个奖学金的名单
clc;clear;
[num1,txt1]=xlsread('Prize1.xlsx','Sheet1');
[num2,txt2]=xlsread('Prize2.xlsx','Sheet1');
A1=num1(:,6);%提出第六列数据
A2=num2(:,6);
B=intersect(A1,A2);%取交集
C=setdiff(A2,B);%去除申请1奖学金的人
disp(['只申请第二个奖学金的名单为:'])
disp([num2str(C)])

%% 5.导入Prize1.xlsx和Prize2.xlsx数据,分别给出申请该两种奖学金女同学和少数名族所占比例
clc;clear;
[num1,txt1]=xlsread('Prize1.xlsx','Sheet1');
[num2,txt2]=xlsread('Prize2.xlsx','Sheet1');% 导入数据
A1=txt1(2:14,3);% prize1的性别数据
B1=txt2(2:27,3);% prize2的性别数据
a1=tabulate(A1);
b1=tabulate(B1);%分别算男女比例
A2=txt1(2:14,4);% prize1的民族数据
B2=txt2(2:27,4);% prize2的民族数据
a2=cell2mat(strfind(A2,'蒙'));
b2=cell2mat(strfind(B2,'蒙'));% 提取蒙族
C2=(size(a2,1)/size(A2,1))*100;
D2=(size(b2,1)/size(B2,1))*100;% 蒙族占比
E=[a1(1,3);b1(1,3);C2;D2];
disp(["两种奖学金各自的女同学和少数民族所占比例为(%):"])
disp(vpa(cell2mat(E),4)) %cell2mat将字符转数字,vpa保留小数点后两位

%% 6.导入Prize1.xlsx和Prize2.xlsx数据,分别给出申请该两种奖学金少数名族女同学名单
clear; clc

T1 = readtable('Prize1.xlsx', 'ReadVariableNames',false);% 导入数据
T1 = T1(2:end, :);% 删去首行
A1=T1(strcmp(T1.Var3, '女') & ~ contains(T1.Var4, '汉') , :)
% A1是申请第一种奖学金少数民族女同学的名单
T2 = readtable('Prize2.xlsx', 'ReadVariableNames',false);
% ReadVariableNames 读取第一行为变量名称
% false 当要读取的区域的第一行包含表格中的数据时使用。readtable 将创建 ‘Var1’,…,‘VarN’ 形式的默认变量名称,其中 N 是变量的数量。
T2 = T2(2:end, :);
A2=T2(strcmp(T2.Var3, '女') & ~ contains(T2.Var4, '汉') , :)
% A2是申请第二种奖学金少数民族女同学的名单
%2015版本用strcmp代替contains比较“汉族”、“汉”,程序如下
clear; clc

T1 = readtable('Prize1.xlsx', 'ReadVariableNames',false);
T1 = T1(2:end, :);
T1(strcmp(T1.Var3, '女') & ~ (strcmp(T1.Var4, '汉族') | strcmp(T1.Var4,'汉')),:)

T2 = readtable('Prize2.xlsx', 'ReadVariableNames',false);
T2 = T2(2:end, :);
T2(strcmp(T2.Var3, '女') & ~ (strcmp(T2.Var4, '汉族') | strcmp(T2.Var4,'汉')),:)

%% 7.导入Prize1.xlsx,列出平均成绩在80-90分同学的名单
clc;clear;
[num1]=xlsread('Prize1.xlsx','Sheet1');
u=num1(:,7);
ind=find(u>80&u<90);
r=num1(ind,6);
disp(['平均成绩在80-90分同学的名单为:'])
disp([num2str(r)])

%% 8.导入Prize2.xlsx,统计发表论文同学的人数
clc;clear;
[num2,txt2]=xlsread('Prize2.xlsx','Sheet1');
f=txt2(2:end,8);
A=sum([f~="无"&f~=""]); % ~=表示不等于,除去表格中“无”和空白格
disp(['发表论文的人数:',num2str(A)])

%% 9.导入Prize1.xlsx,统计论文发表在2018年度的人数
clc;clear;
[num1,txt1]=xlsread('Prize1.xlsx','Sheet1');
f=txt1(2:end,10);
A=sum([f=="2018年"]); % ~=表示不等于
disp(['论文发表在2018年的人数:',num2str(A)])

%% 10.导入Prize2.xlsx,统计有多少同学缺少奖学金和论文发表复印件
clc;clear;
[num2,txt2]=xlsread('Prize2.xlsx','Sheet1');
f=txt2(2:end,14);
n=sum(f~="");
disp(['缺少奖学金和论文发表复印件的人数:',num2str(n)])
%%
clc;clear;
[num2,txt2]=xlsread('Prize2.xlsx','Sheet1');
A=txt2(2:27,14);
B=tabulate(A);
C=B(1,1:2);
D=cell2mat(C(1,2)); % 将元胞数组转化成普通数组
disp(['缺少奖学金和论文发表复印件的人数:',num2str(D)])

%% 金融试验题
%计算
function [d] = rate(a)
Rate=0.042;
NumPeriods1=10;
Payment1=a;
FV1=Payment1*(((1+Rate)^NumPeriods1-1)/Rate)*(1+Rate);
NumPeriods2=10;
Payment2=FV1;
FV2=Payment2*((1+Rate)^NumPeriods2);
NumPeriods3=4;
Payment3=5;
FV3=Payment3*(((1+Rate)^NumPeriods3-1)/Rate)*(1+Rate);
FV4=FV2-FV3;
NumPeriods5=13;
Payment5=FV4;
FV5=Payment5*((1+Rate)^NumPeriods5);
d=FV5
end

% 画图 设
a_all = 0:5:1000;
d_all = [];

for a = a_all
d_all(end+1) = rate2(a);

end
figure(2)
plot(a_all, d_all)
hold on
title('每年存入现金流a与一次性取出现金d的关系示意图')
legend('relation' )
xlabel('a')
ylabel('d')
%%
data=[];

for a=0:5:1000

data=[data,rate2(a)];
end
a=0:5:1000;
plot(a,data)
%% 二叉树
%% 欧式看涨期权
function [price]=Ecall(s0,k,r,T,sigma,N)
% bookput(133.1,133,0.010851,1/12,0.2123,500,0.0206)
% treework(133.1,133,0.010851,1/12,0.2123,500)
dt=T/N;
u=exp(sigma*sqrt(dt));
d=1/u;
p=(exp(r*dt)-d)/(u-d);
tree=zeros(N+1,N+1);
j=0:N;
% 二叉树到期日的现金流
tree(:,N+1)=max(0,s0*u.^(N-j).*d.^j-k);

for j=N-1:-1:0
for i=0:j
tree(i+1,j+1)=exp(-r*dt)*(p*tree(i+1,j+2)+(1-p)*tree(i+2,j+2));
end
end
tree
price=tree(1,1)

end

%% 欧式看跌
function [price]=Eput(s0,k,r,T,sigma,N)

dt=T/N;
u=exp(sigma*sqrt(dt));
d=1/u;
p=(exp(r*dt)-d)/(u-d);
tree=zeros(N+1,N+1);
j=0:N;
% 二叉树到期日的现金流
tree(:,N+1)=max(0,k-s0*u.^(N-j).*d.^j);

for j=N-1:-1:0
for i=0:j
tree(i+1,j+1)=exp(-r*dt)*(p*tree(i+1,j+2)+(1-p)*tree(i+2,j+2));
end
end
%tree
price=tree(1,1);
end

%% 画图
clear; clc; close all %关闭所有的Figure窗口

s0_all = 130:0.1:160;
price11_all = [];
price21_all = [];
for s0 = s0_all
price11_all(end+1) = Ecall(s0,133,0.010851,1/12,0.2123,500);
price21_all(end+1) = Eput( s0,133,0.010851,1/12,0.2123,500);
end
figure(1)
plot(s0_all, price11_all)
hold on
plot(s0_all, price21_all)
title('欧式看涨、欧式看跌的金融资产价格与期权价格关系图')
legend('Ecall' , 'Eput')
xlabel('金融资产价格')
ylabel('期权价格')

sigma_all = 0:0.1:1;
price12_all = [];
price22_all = [];
for sigma = sigma_all
price12_all(end+1) = Ecall(133.1,133,0.010851,1/12,sigma,500);
price22_all(end+1) = Eput( 133.1,133,0.010851,1/12,sigma,500);
end
figure(2)
plot(sigma_all, price12_all)
hold on
plot(sigma_all, price22_all)
title('欧式看涨、欧式看跌的波动率与期权价格关系图')
legend('Ecall' , 'Eput')
xlabel('波动率')
ylabel('期权价格')

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by