2013-12-02 8 views
-1

У меня есть две функций:Интерполяции между кривым и линией R

 x = seq(0, 3, len = 100) 

    y1 = function(x){ 
      x^2 -2*x +2 
     } 
    y2 = function(x){ 
     -4*x + 1 
     } 

Для нахождения интерполяции между двумя функциями, которые получают положительные значения для функции интерполяции, я знаю, что

(1-z)*y1(x) + z*y2(x) = 0 
    (1-z)*y1'(x) + z*y2'(x) = 0 

я знаю, что г = y1 (х)/(y1 (х) у2 (х)), так что я получил, что

2*x^3-10*x^2+16*x-12 = 0 

и я использую R для нахождения сл т выше функции:

> polyroot(c(-12, 16, -10, 2)) 
    [1] 1+1i 1-1i 3+0i 

или

x = uniroot(function(x)2*x^3 -10*x^2+16*x-12, lower= 0, upper = 3) 
    $root 
    [1] 3 

    $f.root 
    [1] 0 

    $iter 
    [1] 0 

    $estim.prec 
    [1] 0 

затем

z = (x^2 - 2*x +2)/ (x^2+2*x+1) 

    > z 
    [1] 0.3125 

    y3 = function(x){(1-z)*(x^2-2*x+2) + z*(-4*x+1)} 
    y3(x) 

, но до сих пор у3 (х) отрицательна это некоторые части, как я могу решить эту проблему?

+0

Какова цель '2 * x^3-10 * x^2 + 16 * x-12 = 0' и почему вы находите ее корни? – kdauria

+0

В конце мы ищем корни 2 * x^3-10 * x^2 + 16 * x-12 = 0. Но о z это неверно, его можно также записать как: z = y1 (x)/[y1 (x) -y2 (x)]. – rose

ответ

0

Во-первых, сжатая версия некоторого кода в вашем вопросе.

x = seq(0, 3, len = 100) 
y1 = function(x) x^2 -2*x +2 
y2 = function(x) -4*x + 1 
z = function(x) y1(x)/(y1(x)-y2(x)) 

Теперь некоторые чертежи для визуализации.

plot(x,y1(x),ylim=c(-12,5),type="l",ylab="y") 
lines(x,y2(x),col="blue") 
lines(x,z(x),col="red") 
abline(h=0,v=0,col="gray") 
legend("bottomleft",c("y1(x)","y2(x)","z(x)"),fill=c("black","blue","red")) 

enter image description here

По той причине, почему ваш у3 (х) функция по-прежнему отрицательный, я думаю, что это больше математики вопроса, чем вопрос программирования. Построение y3 (x), я вижу, что их много отрицательных значений. Я не слишком четко понимаю другие части вашего вопроса, поэтому я не уверен, как решить эту часть вашей проблемы.

Смежные вопросы