Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hỏi về đa thức Lagrange

    Đề bài là hãy viết chương trình tính gần đúng hàm số y =f(x) với bảng giá trị x, y cho trước = đa thức Lagrange.
    Em viết như sau để tình L[i] thì chạy được.

    Mã:
    #include <stdio.h>
    #define n 2
    
    main()
    {
    float x[n], y[n], temp, X;
    int i,j;
    
    printf("Nhap vao so x: ");
    scanf("%f",&X);
    
    for (i=0; i<= n; i++)
    {
    printf(" x[%d] ", i);
    scanf("%f", &x[i]);
    }
    
    
    for(i=0; i <= n; i++)
    {
    
    temp = 1;
    for(j=0; j <= n; j++)
    
    if (j!=i) temp = temp*( (X-x[j]) / (x[i]-x[j]) );
    
    printf("
    %f",temp);
    
    
    }
    
    }
    Nhưng thay thay biến temp = mảng L[i] thì lại ko chạy được

    Mã:
    #include <stdio.h>
    #define n 2
    
    void main()
    {
    float x[n], y[n], L[n], X;
    int i,j;
    
    printf("Nhap vao so x: ");
    scanf("%f",&X);
    
    for (i=0; i<= n; i++)
    {
    printf(" x[%d] ", i);
    scanf("%f", &x[i]);
    }
    
    
    
    
    for(i=0; i <= n; i++)
    {
    
    L[i] = 1;
    for(j=0; j <= n; j++)
    
    if (j!=i) L[i] = L[i]*( (X-x[j]) / (x[i]-x[j]) );
    
    
    printf("
    %f",L[i]);
    
    
    }
    
    }
    Xin hỏi lý do. Mong các anh giúp đỡ
    Thanks

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đang cần gấp. Ai giúp em với ạ

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Khi mình thêm đoạn bôi đen vào thì lại nhận được kết quả khác. Trong khi biểu thức tính L[i] của mình ko liên quan gì đến y[i]. Lỗi này là sao vậy
    Đúng là hơi quái nhưng mình đã tìm ra lỗi rồi
    - Khi bạn khai báo biến float x[n], y[n], L[n], X; ở đây n=2 bạn đã cấp phát cho mỗi mảng x,y,L được 2 vùng nhớ mỗi vùng 4 byte
    - Nhưng khi bạn nhập mảng: for (i=0; i<= n; i++) nhìn vòng lặp có thể thấy bạn nhập đến 3 phần tử, vậy là mảng bị thiếu nên giá trị nhập vào cuối không còn chính xác, một số compile C khá thoải mái đã không báo lỗi này, dẫn đến kết quả thu được bị sai không rõ nguyên nhân.
    - Giờ bạn chỉ sửa lại một chút phần nhập mảng x,y là chạy tốt.
    Have fun!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình thấy nó cho kết quả giống nhau mà, không sai gì cả. Nhưng bạn cần chú ý cách trình bày code
    Mã:
    #include <stdio.h>
    #define n 2
    
    void main()
    {
    	float x[n], y[n], L[n], X;
    	int i,j;
    	printf("Nhap vao so x: ");
    	scanf("%f",&X);
    	for (i=0; i<= n; i++)
    	{
    		printf(" x[%d] ", i);
    		scanf("%f", &x[i]);
    	}
    	for(i=0; i <= n; i++)
    	{
    		L[i] = 1;
    		for(j=0; j <= n; j++)
    			if (j!=i)
    				L[i] = L[i]*( (X-x[j]) / (x[i]-x[j]) );
    		printf("
    %f",L[i]);
    	}
    }

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình dùng C-Free dịch thì lại được rồi. Thanks bạn
    Nhưng mình có 1 thắc mắc

    Mã:
    #include <stdio.h>
    #define n 2
    
    void main()
    {
    	float x[n], y[n], L[n], X;
    	int i,j;
    	printf("Nhap vao so x: ");
    	scanf("%f",&X);
    	for (i=0; i<= n; i++)
    	{
    		printf(" x[%d] ", i);
    		scanf("%f", &x[i]);
    	}
    
    	for (i=0; i<= n; i++)
    	{
    		printf(" y[%d] ", i);
    		scanf("%f", &y[i]);
    	}
    
    	for(i=0; i <= n; i++)
    	{
    		L[i] = 1;
    		for(j=0; j <= n; j++)
    			if (j!=i)
    				L[i] = L[i]*( (X-x[j]) / (x[i]-x[j]) );
    		printf("
    %f",L[i]);
    	}
    }
    Khi mình thêm đoạn bôi đen vào thì lại nhận được kết quả khác. Trong khi biểu thức tính L[i] của mình ko liên quan gì đến y[i]. Lỗi này là sao vậy
    Thanks

  6. #6
    Ngày tham gia
    Sep 2015
    Đang ở
    hà nội
    Bài viết
    0
    Đã update câu hỏi. Mong mọi người chỉ giùm [IMG]images/smilies/smile.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •