问题描述:
形如fx = xx + bx + c 的二次函数在关键点xc = -b/2处达到最小值。计算函数f在区间【L,R】上的最小值做一些判断。如果xc在这个区间内,则f(xc)就是问题的解,否则函数f在x=L或x=R处达到最小值。
写一段脚本程序,接收实数L,R,b和c的输入,然后输出二次函数fx = xx + bx + c在区间【L,R】上的最小值。这个程序也应该显示这个最小值对应的x值。
% Script Eg1_2
% Minimum of the quadratic x^2 + bx + c on the interval [L,R].
% Acquire and display the input data...
b = input('Enter b:');
c = input('Enter c:');
L = input('Enter L:');
R = input('Enter R (L<R):');
clc
fprintf('Quadratic: x^2 + bx + c, b = %5.2f, c = %5.2f\n',b,c)
fprintf('Interval : [L,R], L = %5.2f, R = %5.2f\n\n',L,R)
% The critical point...
xc = -b/2;
if xc < L
% Minimum at the left endpoint...
fL = L^2 + b*L + c;
fprintf('Minimizing x = %5.2f\n',L)
fprintf('Minimum f value = %5.2f\n',fL)
elseif L <= xc && xc <= R
% Minimum at the critical point...
fxc = c - (b/2)^2;
fprintf('Minimizing x = %5.2f\n',xc)
fprintf('Minimum f value = %5.2f\n',fxc)
else
% Minimum at the right endpoint...
fR = R^2 + b*R + c;
fprintf('Minimizing x = %5.2f\n',R)
fprintf('Minimum f value = %5.2f\n',fR)
end
知识点:
- max(算术表达式1,算术表达式2)
的结果是计算两个表达式后得到较大的值,函数min的值正好是相反的。 - floor(x)为小于或等于x值得最大整数。
ceil(x)为大于或等于x值得最小整数。
round(x)是最接近x值得整数,如果恰好在两个整数的正中间,round(x)的结果是离零较远的那个数。 - 如果x和y的值为正整数,则rem(x,y)为x除以y得到余数,所以rem(22,7)的值为1.函数rem也可应用于任意的实数。
- ~= 为不等于。
- 就像算术运算符一样,关系与逻辑运算符也有优先级。非运算(?)的优先级最高,接下来是关系运算符(例如<,==,~=等等)然后是“与”运算符,最后是“或”运算符。
- 在同一级的运算符中,采用从左到右的先后顺序,但可通过括号改变顺序。例如,为了确定x是否在3和7之间,你必须使用“与”操作将两个比较运算连起来。
3<x&&x<7
写成3<x<7是错误的,因为按从左到右的运算顺序,首先计算3<x,得到真或者假,然后这个得到的布尔值(而不是x)将与7进行比较。