## 源码简介

clc; clear; close all; warning off; load Sunspot.txt %YEAR MON SSN DEV %画出导入的活动数据 YEAR = Sunspot(:,1); MON = Sunspot(:,2); SSN = Sunspot(:,3); %sun spot number DEV = Sunspot(:,4); %标准偏差表 figure; subplot(211);plot(SSN,'b.'); title('SSN'); subplot(212);plot(DEV,'b.'); title('DEV'); addpath 'funcs\' %步骤1，Identify a reasonable frequency, f. %步骤1，Identify a reasonable frequency, f. %步骤1，Identify a reasonable frequency, f. %由于早期的数据不精确，可以选择后期的数据作为计算频率的数据 K = 20;%前22年数据去除 Start = 12*K+1; mainPeriod = func_cycle_cal(SSN(Start:end)); disp('太阳黑子的活动周期为(单位年)：'); mainPeriod %步骤2，Compute X1 = cos(2πft) and X2 = sin(2πft). %步骤2，Compute X1 = cos(2πft) and X2 = sin(2πft). %步骤2，Compute X1 = cos(2πft) and X2 = sin(2πft). t = 1/(12):1/(12):length(SSN)/(12); yc = cos(2*pi*t/mainPeriod); ys = sin(2*pi*t/mainPeriod); figure; subplot(211); plot(yc,'r');hold on plot(ys,'b');hold off legend('X1','X2'); subplot(212); plot(yc,'r--');hold on plot(ys,'k--');hold on plot(SSN/max(SSN),'b.');hold off legend('X1','X2','SSN'); %步骤3，Fit the linearized cyclic model with least squares using Matlab. %步骤3，Fit the linearized cyclic model with least squares using Matlab. %步骤3，Fit the linearized cyclic model with least squares using Matlab. %Nt = β0 + β1X1 + β2X2 + error. %最小二乘辨识 c0 = [1 1 1]';%直接给出被辨识参数的初始值,即一个充分小的实向量 p0 = 10^6*eye(3,3); %直接给出初始状态P0，即一个充分大的实数单位矩阵 for k=1:length(SSN); %开始求K h1 =[1,yc(k),ys(k)]'; x = h1'*p0*h1 + 99; x1 = inv(x); %开始求K(k) k1 = p0*h1*x1; %求出K的值 d1 = SSN(k)-h1'*c0; c1 = c0+k1*d1; %求被辨识参数c e1 = c1-c0; %求参数当前值与上一次的值的差值 e2 = e1./c0; %求参数的相对变化 e(:,k) = e2; %把当前相对变化的列向量加入误差矩阵的最后一列 c0 = c1; %新获得的参数作为下一次递推的旧参数 c(:,k) = c1; %把辨识参数c 列向量加入辨识参数矩阵的最后一列 p1 = p0-k1*k1'*[h1'*p0*h1+1]; %求出 p(k)的值 p0 = p1; %给下次用 end %估计得到的太阳黑子活动曲线 for k=1:length(SSN); %开始求K Y_predict(k) = c(1,k) + c(2,k)*yc(k) + c(3,k)*ys(k); end figure; plot(Y_predict,'b','LineWidth',2);hold on; plot(SSN,'r');hold off; legend('预测SSN','实际SSN'); %步骤4: Interpret the ?tted model parameters in terms of amplitude,frequency, and phase shift of the cyclic model. %步骤4: Interpret the ?tted model parameters in terms of amplitude,frequency, and phase shift of the cyclic model. %步骤4: Interpret the ?tted model parameters in terms of amplitude,frequency, and phase shift of the cyclic model. %根据预测结果计算 %ut = Bcos(2*pi*f*t+o); t = 1/(12):1/(12):length(SSN)/(12); for k = 1:length(SSN); beta0(k) = c(1,k); beta1(k) = c(2,k); beta2(k) = c(3,k); BETA(k) = sqrt(beta1(k)^2 + beta2(k)^2); fai(k) = atan(-beta2(k)); %ut = Bcos(2*pi*f*t+o); %t = 1/(12):1/(12):length(SSN)/(12); %yc = cos(2*pi*t/mainPeriod); ut(k) = BETA(k)*cos(2*pi*t(k)/mainPeriod+fai(k)) + beta0(k); end figure; plot(ut(40:end),'b','LineWidth',2); hold on; plot(SSN(40:end),'r'); hold off; legend('Bcos(2*pi*f*t+o)','实际SSN'); %步骤5: Use residual plots to validate/evaluate the model. %步骤5: Use residual plots to validate/evaluate the model. %步骤5: Use residual plots to validate/evaluate the model. %计算误差 Err = Y_predict' - SSN; figure; plot(Err,'.'); xlabel('Year'); ylabel('Nt - Ut'); %步骤6: Consider how the model might be improved. %步骤6: Consider how the model might be improved. %步骤6: Consider how the model might be improved. %模型的改进 %注意，从上面的分析结果可知，预测模型的误差较大，做如下的改进，使其误差较小 %最小二乘辨识 clear h1 x x1 k1 d1 c1 e1 e2 e c0 c p1 p0 c0 = [1 1 1 1 1 1 1 1]';%直接给出被辨识参数的初始值,即一个充分小的实向量 p0 = 10^6*eye(8,8); %直接给出初始状态P0，即一个充分大的实数单位矩阵 t = 1/(12):1/(12):length(SSN)/(12); yc2 = cos(2*pi*t/(2*mainPeriod)); ys2 = sin(2*pi*t/(2*mainPeriod)); yc3 = cos(2*pi*t/(3*mainPeriod)); ys3 = sin(2*pi*t/(3*mainPeriod)); for k=1:length(SSN); %开始求K h1 =[1,k,yc(k),ys(k),yc2(k),ys2(k),yc3(k),ys3(k)]'; x = h1'*p0*h1 + 99; x1 = inv(x); %开始求K(k) k1 = p0*h1*x1; %求出K的值 d1 = SSN(k)-h1'*c0; c1 = c0+k1*d1; %求被辨识参数c e1 = c1-c0; %求参数当前值与上一次的值的差值 e2 = e1./c0; %求参数的相对变化 e(:,k) = e2; %把当前相对变化的列向量加入误差矩阵的最后一列 c0 = c1; %新获得的参数作为下一次递推的旧参数 c(:,k) = c1; %把辨识参数c 列向量加入辨识参数矩阵的最后一列 p1 = p0-k1*k1'*[h1'*p0*h1+1]; %求出 p(k)的值 p0 = p1; %给下次用 end %估计得到的太阳黑子活动曲线 for k=1:length(SSN); %开始求K Y_predict2(k) = c(1,k) + c(2,k)*k + c(3,k)*yc(k) + c(4,k)*ys(k) + c(5,k)*yc2(k) + c(6,k)*ys2(k) + c(7,k)*yc3(k) + c(8,k)*ys3(k); end figure; plot(Y_predict2,'b','LineWidth',2);hold on; plot(SSN,'r');hold off; legend('预测SSN','实际SSN');

## 本站长期招聘程序代写高手，欢迎加入华南地区matlab团队

 想创业却没有经验的人 无论你是否有过网上开店的经验，都可以随时联系在线客服，建立自己独立的网站 想开网店却不知道如何入手 淘宝创业成本低而且风险小，如果想开淘宝店的朋友可以联系在线客服。 想兼职创业，却不擅长交际与服务的人 在家创业月入5000元。网站程序+百套群发工具+网赚资料+域名+空间+本站终身代理资格，这样你网赚的条件全具备了。每天3小时管理、推广、收钱。 缺乏能快速赢利型产品的人 导入多种最新流行营销软件+网赚教程，让入驻者轻松加盟、复制有效成交技巧、快速赚钱。

## 源码评论评论内容只代表网友观点，与本站立场无关！

评论摘要(共 0 条，得分 0 分，平均 0 分) 查看完整评论

## 浏览说明

* 本站所有源码全部公开，随时随地浏览!
* MATLAB软件如用于商业用途，请购买正版!
* 如果您发现下载链接错误，请点击报告错误谢谢！
* 站内提供的所有软件包含破解及注册码均是由网上搜集，若侵犯了你的版权利益，敬请来信通知我们!