%1水渠中的水流使用不同的形式绘制拟 合曲线
X_waterHeight=[0,1.7,1.95,2.60,2.92,4.04,5.24 ];
Y_waterFlow=[0,2.6,3.6,4.03,6.45,11.22,30.61 ];

p1_1=polyfit(X_waterHeight,Y_waterFlow,1);
p1_2=polyfit(X_waterHeight,Y_waterFlow,2);
p1_3=polyfit(X_waterHeight,Y_waterFlow,3);

xi_height=[0,1.7,1.95,2.60,2.92,4.04,5.24 ];
y1_Flow=polyval(p1_1,xi_height);
y2_Flow=polyval(p1_2,xi_height);
y3_Flow=polyval(p1_3,xi_height);%计算完毕

plot(X_waterHeight,Y_waterFlow,'-o')%画图操作
hold on;
plot(xi_height,y1_Flow,'k:')
plot(xi_height,y2_Flow,'r-.')
plot(xi_height,y3_Flow,'m--')

xlabel('高度（ft）');
ylabel('流量（ft3/s）');
legend('原始数据','一次多项式拟合','二次多项式拟合','三次多项式拟合');
title('水流运动高度与流量关系')
%从曲线与实际已知数据平方差计算结果看，三次多项式误差最小，拟合效果最好
ss1=sum((y1_Flow-Y_waterFlow).^2) %154.4225
ss2=sum((y2_Flow-Y_waterFlow).^2) %26.1068
ss3=sum((y3_Flow-Y_waterFlow).^2) %3.0951

%2
x2=-1:0.1:1;
y2=sin(x2);
x22=-1:0.1:1;
p2_2=polyfit(x2,y2,2);
p2_3=polyfit(x2,y2,3);%分别作二阶三阶多项式拟合
y2_2=polyval(p2_2,x22);
y2_3=polyval(p2_3,x22);%计算新的y值
figure
plot(x2,y2,'-o');
hold on
plot(x22,y2_2,'r')
hold on
plot(x22,y2_3,'g');

ylabel('sin(x)')
title('sin(x)的二次，三次多项式拟合')
legend('二次多项式拟合','三次多项式拟合','原始数据');
fprintf('\n二次拟合多项式为：%.3fx^2+%.3fx+%.3f=0\n', p2_2(1), p2_2(2), p2_2(3));
fprintf('\n三次拟合多项式为：%.4fx^3+%.4fx^2+%.4fx+%.4f=0\n', p2_3(1), p2_3(2), p2_3(3),p2_3(4));
%从曲线与实际已知数据平方差计算结果看，三次多项式误差最小，拟合效果最好
ss1=sum((y2_2-y2).^2) %0.0153
ss2=sum((y2_3-y2).^2) %2.8239e-06

%3 零点问题
f_3=@(x)sin(x).^2-cos(x);
figure
fplot(f_3,[-2*pi,2*pi]);
grid on
hold on
%观察图像 初步寻找零点区间
x0_1=fzero(f_3,[-6,-4]);
x0_2=fzero(f_3,[-2,0]);
x0_3=fzero(f_3,[4,6]);
x0_4=fzero(f_3,[0,2]);
plot(x0_1,f_3(x0_1),'ro',x0_2,f_3(x0_2),'ro',x0_3,f_3(x0_3),'ro',x0_4,f_3(x0_4),'ro');
legend('f(x)','零点')
title('f=sin(x)^2-cos(x)函数零点')

%4利用quad和quadl求积分
f_4=@(x)x.^3+2*x.^2-x+3;
inter1=quad(f_4,-1,1)  %可以用integral(f_4,-1,1)替换
inter2=quadl(f_4,-1,1) %integral(f_4,-1,1)
fprintf('\n则quad与quadl积分函数的结果分别为%f和%f\n',inter1,inter2)

%5积分求解温度与热能
a=25.48;
b=1.520*10^(-2);
c=0.7155*10^(-5);
d=1.312*10^(-9);
f_Cp=@(T)a+b*T+c*(T.^2)+d*(T.^3);
inter_h=quad(f_Cp,300,500);%inter_h=integral(f_Cp,300,500);
fprintf('\n氧气从 300K 加热到 500K 时焓的变化量为%f\n',inter_h);

%方法二 符号函数计算
syms a x b c d
y=int(a+b.*x+c.*x.^2+d.*x.^3,'x','300','500'); 
a=25.48;
b=1.520e-2;
c=-0.7155e-5;
d=1.312e-9;
eval(y)

%6求解优化问题
%方法一 非线性无约束最优解fminunc
%在函数文件中定义fun6.m
options = optimset('GradObj', 'on', 'MaxIter', 400);
initialX=[-2,1];
[optX,fuctionVal,exitflag]=fminunc(@fun6,initialX,options);
%在图中标示最小值点
[x1,x2]=meshgrid(-20:0.2:20,-20:0.2:20);
z=3.*x1.^2+2.*x1.*x2+x2.^2;
figure
mesh(x1,x2,z);
hold on
title('非线性无约束优化函数最优解')
plot3(optX(1),optX(2),fuctionVal,'r.','markersize',30);
legend('','最优解点')

%方法二 约束条件下的非线性优化fmincon
f=@(x)3*x(1).^2+2*x(1).*x(2)+x(2).^2;
lb=[-20 -20];
ub=[20 20];
x0=[1;1];
[optx,fval]=fmincon(f,x0,[],[],[],[],lb,ub);
[x1,x2]=meshgrid(-20:0.2:20,-20:0.2:20);
z=3*x1.^2+2*x1.*x2+x2.^2;
mesh(x1,x2,z);
hold on
plot3(optx(1), optx(2), fval, 'r.','markersize',30);

