采用if...else结构解决分段函数--源码案例

package demo;
import java.util.Scanner;
/**
 *    求方程的解
 *          Y =  
 *              1)  3*X+9           x < -3
 *              2)  12              x 属于区间[-3 ,18)
 *              3)  X*X+5*X-3       x 属于区间[18 ,100)
 *              4)  90-X            x >= 100
 *  
 *  @author sunRainAmazing
 * 
 */

public class SolveEquation {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入整数X的值:");
        int x,y;
        x = scanner.nextInt();//从控制台接收一个整数值
        if(x<-3){
            y=3*x+9;
        }else if(-3<=x&&x<18){
            y=12;
        }else if(18<=x&&x<100){
            y=x*x+5*x-3;
        }else{
            y=90-x;
        }
        System.out.println("当x="+x+",   y="+y);
    }

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验名称: 实验一 拉格朗日插值 引言 我们在生产生活中常常会遇到这样的问题:某个实际问题中,函数f(x)在区间[a,b] 上存在且连续,但却很难找到其表达式,只能通过实验和观测得到有限点上的函数表。 显然,根据这些点的函数值来求其它点的函数值是非常困难的。有些情况虽然可以写出 表达式,但结构复杂,使用不方便。所以我们总是希望根据已有的数据点(或函数表) 来构造某个简单函数P(x)作为f(x)的近似值。插值法是解决此类问题的一种比较古老的 、但却很常用的方法。它不仅直接广泛地应用于生产实际和科学研究中,而且也是进一 步学习数值计算方法的基础。 实验目的和要求 运用Matlab编写三个.m文件,定义三种插值函数,要求一次性输入整张函数表,并利 用计算机选择在插值计算中所需的节点。分别通过分段线性插值、分段二次插值和全区 间上拉格朗日插值计算f(0.15),f(0.31),f(0.47)的近似值。已知函数表如下: "x " 2、分段二次插值 "%分段二次插值 " "function y=piece_square(x0,y0,x) " "% x0,y0为已知点,x为待求点 " "n=length(x0);p=length(y0);m=length(x); " "% n,p,m分别为x0,y0,x长度 " "if n~=p " "fprintf('Error! Please input again!\n'); " "% x0和y0长度不等时,报错 " "else " "for i=1:m " "z=x(i); " "sum=0.0; " "l=0; " "%给l赋初值,根据x的值确定l " "if z<x0(1)"z>x0(n) " "fprintf('Error!x(%d) is out of range!\n',i); " "break; " "end " "%当插值点超出范围时,报错 " "for j=1:n-2 " "p=0.5*(x0(j)+x0(j+1)); " "if z<p " "l=j; " "end " "if l~=0 " "break; " "end " "%一旦l有非零值,则终止循环,选出合适的l " "end " "if l==0 " "l=n-1; " "end " "%输入正确时,若l还等于零,l=n-1 " "for k=l-1:l+1 " "a=1.0; " "for s=l-1:l+1 " "if s~=k " "a=a*(z-x0(s))/(x0(k)-x0(s)); " "end " "end " "sum=sum+y0(k)*a; " "end " "y(i)=sum; " "fprintf('y(%d)=%f\nx1=%.3f y1=%.5f\nx2=%.3f y2=%.5f\nx3=%.3f " "y3=%.5f\n\n',i,y(i),x0(l-1),y0(l-1),x0(l),y0(l),x0(l+1),y0(l+1)); " "%输出插值结果与所需节点 " "end " "end " "end " 3、拉格朗日全区间插值 "%拉格朗日全区间插值 " "function y=lagrange(x0,y0,x) " "% x0,y0为已知点,x为待求点 " "n=length(x0);p=length(y0);m=length(x); " "%n,p,m分别为x0,y0,x长度 " "if n~=p " "fprintf('Error! Please input again!\n'); " "%x0和y0长度不等时,报错 " "else " "for i=1:m " "z=x(i); " "s=0.0; " "if z<x0(1)"z>x0(n) " "fprintf('Error!x(%d) is out of range!\n',i); " "break; " "end " "%当插值点超出范围时,报错 " "for k=1:n " "p=1.0; " "for j=1:n " "if j~=k " "p=p*(z-x0(j))/(x0(k)-x0(j)); " "end " "end " "s=p*y0(k)+s; " "end " "y(i)=s; " "fprintf('y(%d)=%.5f\n',i,y(i)); " "%输出插值结果 " "end " "end " "end " 算例分析 1. 测试示例 ">> x=[1 2 3 4]; " ">> y=[2 3 4]; " ">> y2=lagrange(x,y,x0) " "Error! Please input again! " " " ">> x=[1 2 3 4]; " ">> y=[2 3 4 5]; " ">

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值