matlab的persistent,matlab 利用persistent关键字 存储持久变量

数学知识:

标准差体现随机变量取值与其期望值的偏差。标准差的值较大,则表明该随机变量的取值与其期望值的偏差较大

反之,则表明此偏差较小。

函数功能:

函数必须能够接受一次输入值并记录对应的已输入数N、sum(xi)、sum(xi^2),用于计算当前的平均值和标准差。

已输入数N、sum(xi)、sum(xi^2)必须存储在持久内存中,这样在每一次调用后,不会消失,最后函数须具备需要时把这些值清零的功能。

1. State the problem

编写一个程序,计算当前输入数据的平均数和标准差。函数必须具备需要时计算功能和清零功能

2. Define the inputs and outputs

输入变量:当输入字符型“reset”用于已输入数N、sum(xi)、sum(xi^2)的清零

3.Design the algorithm(伪代码)

这个函数分为4步:

1)check for a legal number of arguments

2)check for a ‘reset‘,and resets sums if preset,otherwise,add current value to running sums

3)calculate and return runing average and std dev if enough data is available

return zeros if not enough data

4)这些步骤的伪代码:

检查输入的每个数的合法性

if x == ‘reset‘

n

sum_x

sum_x2

else

n

sum_x

sum_x2

%计算平均值ave和方差std

if n == 0

ave

std

else if n==1

ave

std

else

ave

std

end

4.Turn the algorithm into MATLAB statements

自定义函数:runstats.m

function [ave, std] =runstats(x)%RUNSTATS 随时计算一组数的平均值和方差% 输入数x必须一次一个,当输入字符串‘reset‘时,持久变量清零%定义输入输出变量% ave --平均值% msg --错误信息% n --一组数的个数% std --方差% sum_x --一组数的的和% sum_x2 --一组数的平方和% x --输入值%版本记录:%日期 负责人 版本描述% ==== ========== =====================

% 2015-10-9 17:43:33王茂春 源代码% 持久变量声明(重要)

persistent n % 输入数的个数

persistent sum_x % 输入数的和

persistent sum_x2 % 输入数的平方和% 检查输入数的合法性

msg = nargchk(1,1,nargin); %最少1个参数,最多一个参数,检查输入变量

error(msg);% 如果输入时‘reset‘,重置if x == ‘reset‘n= 0;

sum_x= 0;

sum_x2= 0;elsen= n + 1;

sum_x= sum_x +x;

sum_x2= sum_x2 + x^2;

end%计算平均值和方差if n == 0 %0输入

ave= 0;

std= 0;

elseif n== 1 %1输入

ave=sum_x;

std= 0;elseave= sum_x /n;

std= sqrt((n*sum_x2 - sum_x^2) / (n*(n - 1)));

end

调用函数test_runstats.m:

%脚本文件: test_runstats.m%

%程序目的:%计算输入一系列数的平均值和方差,(是随时保存值的)%

%版本记录:%日期 负责人 版本描述% ==== ========== =====================

% 2015-10-9 17:43:33王茂春 源代码%

%定义变量:% array --输入数组% ave --平均值% ii --循环索引% nvals --输入数的数量% std --方差%首先清零初始化

[ave std]= runstats(‘reset‘);%确定输入数的数量

nvals= input(‘输入这一组总数:‘);%获取输入值for ii = 1:nvals% 提示输入(这种方法:分成两个语句的学习下。。。)

string = [‘输入数值 ‘ int2str(ii) ‘: ‘];

x= input(string);%调用函数求解(输出变量是多个)

[ave std]=runstats(x);%显示运算结果

fprintf(‘平均值 = %8.4f; 标准差 = %8.4f\n‘,ave, std);

end

原文:http://www.cnblogs.com/shuqingstudy/p/4864610.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值