Hình dung quy tắc chuỗi


10

Định nghĩa

Quy tắc chuỗi với hai chức năng nói rằng:

D[f(g(x))] = f'(g(x)) * g'(x)

Hay cách khác:

D[f1(f2(x))] = f1'(f2(x)) * f2'(x)

Quy tắc chuỗi với ba chức năng nói rằng:

D[f(g(h(x)))] = f'(g(h(x))) * g'(h(x)) * h'(x)

Hay cách khác:

D[f1(f2(f3(x)))] = f1'(f2(f3(x))) * f2'(f3(x)) * f3'(x)

Vân vân.

Bài tập

  • Cho một số nguyên từ 2 đến 21, xuất ra quy tắc chuỗi với nhiều hàm đó, ở dạng thứ nhất hoặc ở dạng thứ hai.
  • Vui lòng xác định nếu bạn đang sử dụng mẫu thứ hai.

Thông số kỹ thuật

  • Định dạng của chuỗi phải chính xác như đã nêu ở trên, với:
    1. tất cả các không gian được giữ nguyên
    2. viết hoa D
    3. một dấu ngoặc vuông ngay sau D
    4. dấu hoa thị được giữ nguyên
  • Thêm một không gian dấu (U + 0020) được cho phép.
  • Các số 0 đứng đầu trong các tên hàm ở dạng thứ hai (ví dụ f01thay vì f1) được cho phép.

Tủ thử

Nếu bạn sử dụng mẫu đầu tiên:

input output
2     D[f(g(x))] = f'(g(x)) * g'(x)
3     D[f(g(h(x)))] = f'(g(h(x))) * g'(h(x)) * h'(x)

Nếu bạn sử dụng mẫu thứ hai:

input output
2     D[f1(f2(x))] = f1'(f2(x)) * f2'(x)
3     D[f1(f2(f3(x)))] = f1'(f2(f3(x))) * f2'(f3(x)) * f3'(x)

Bảng xếp hạng


Tên hàm có phải là chữ thường không?
betseg

@betseg Vâng tất nhiên rồi.
Rò rỉ Nun

Câu trả lời:


6

Python 2, 79 byte

f=lambda n:0**n*"D[x] ="or f(n-1).replace("x","f%d(x)"%n)+1%n*" *"+" f%d'(x)"%n

Đầu ra với các chức năng được đánh số.

Xây dựng đầu ra bằng cách liên tục thay thế mỗi xvới fn(x), sau đó phụ thêm * fn'(x). Các *bị bỏ qua cho n==1.

So sánh với chương trình lặp (92 byte):

r="D[x] = ";n=0
exec'n+=1;r=r.replace("x","f%d(x)"%n)+"f%d\'(x) * "%n;'*input()
print r[:-3]

96 byte:

n=input();r='';s='x'
while n:s='f%d(%%s)'%n%s;r=" * f%d'"%n+s[2:]+r;n-=1
print"D[%s] = "%s+r[3:]

Đầu ra với các chức năng được đánh số.

Tích lũy hàm lồng f1(f2(f3(x)))trong svà biểu thức phía bên phải trong r. Định dạng chuỗi là clunky; chuỗi f từ 3.6 sẽ làm tốt hơn.


5

Sesos , 49 byte

0000000: 2ac992 63fb92 245fb6 6c57be 255bbe 2cc9bf 6d49da  *..c..$_.lW.%[.,..mI.
0000015: 025e7f fdced0 fd67f8 fcde33 b6a7b2 643d4f 65597e  .^.....g...3...d=OeY~
000002a: f77a72 dd73cf fe                                  .zr.s..

Dùng thử trực tuyến

Tháo rời

set numin
add 68   ; 'D'
put
sub 7    ; '=' - 'D'
fwd 1
add 32   ; ' '
fwd 1
add 91   ; '['
put
add 2    ; ']' - '['
fwd 1
add 102  ; 'f'
fwd 1
add 40   ; '('
fwd 3
add 120  ; 'x'
rwd 2
get
jmp
    jmp
        fwd 1
        add 1
        rwd 3
        put
        add 1
        fwd 1
        put
        fwd 1
        sub 1
    jnz
    sub 1
    rwd 1
    add 1    ; ')' - '('
    fwd 3
    put
    rwd 1
    jmp
        rwd 3
        sub 1
        fwd 1
        put
        fwd 1
        add 1
        fwd 1
        sub 1
    jnz
    rwd 4
    put
    get
    add 41   ; ')'
    rwd 1
    put
    rwd 1
    put
    get
    add 42   ; '*'
    fwd 1
    put
    fwd 2
    put
    add 1
    fwd 1
    sub 2    ; '\'' - ')'
    put
    add 1    ; '(' - '\''
    put
    fwd 1
jnz
fwd 2
put
rwd 5
put

3

JavaScript (ES6), 89 byte

f=n=>--n?f(n).replace(/x/g,`${c=(n+15).toString(36)}(x)`)+` * ${c}'(x)`:`D[f(x)] = f'(x)`

Hoặc 75 byte bằng cách sử dụng mẫu thứ hai:

f=n=>n>1?f(n-1).replace(/x/g,`f${n}(x)`)+` * f${n}'(x)`:`D[f1(x)] = f1'(x)`

Hoặc 82/64 byte nếu tôi cho phép thêm một 1 *thuật ngữ:

f=n=>n?f(n-1).replace(/x/g,`${c=(n+14).toString(36)}(x)`)+` * ${c}'(x)`:`D[x] = 1`
f=n=>n?f(n-1).replace(/x/g,`f${n}(x)`)+` * f${n}'(x)`:`D[x] = 1`

1
Tại sao bạn không đặt phiên bản 73 byte làm chính?
Nữ tu bị rò rỉ

1
Nếu bạn đang đệ quy, bạn cần f=chương trình của bạn sẽ không hoạt động.
Mực giá trị

2
@ KevinLau-notKenny Bah, tôi luôn quên làm điều đó.
Neil

1

Ruby, 72 byte

Dạng thứ hai. Cổng tới Ruby từ câu trả lời @Neil.

f=->n{n>1?f[n-1].gsub(?x,"f#{n}(x)")+" * f#{n}'(x)":"D[f1(x)] = f1'(x)"}

1

Julia, 66 byte

!x=x>1?replace(!~-x,"x","f$x(x)")*" * f$x'(x)":"D[f1(x)] = f1'(x)"

Cổng câu trả lời ES6 của @ Neil. Sử dụng mẫu thứ hai.


0

Python 2, 174 byte

i=input()+1
a=lambda x:'('.join(['f%d'%e for e in range(x,i)])+'(x'+')'*(i-x)
print'D[%s] = %s'%(a(1),' * '.join(["f%d'%s%s)"%(e+1,'('*(i-e-2>0),a(e+2))for e in range(i-1)]))

Rất nhiều phòng còn lại để được chơi golf ở đây. Sử dụng hình thức thứ hai ( f1, f2, vv).


0

JavaScript (ES6), 194 byte

n=>{s="D[";for(i=1;i<=n;i++)s+="f"+i+"(";s+="x";s+=")".repeat(n);s+="] = ";for(i=1;i<=n;i++){s+="f"+i+"'(";for(j=i+1;j<=n;j++)s+="f"+j+"(";s+="x";s+=")".repeat(n-i+1);if(i-n)s+=" * ";}return s;}

31 byte được lưu nhờ @LeakyNun.

Đó là một chức năng lambda ẩn danh. Tôi chắc chắn có một số cách để rút ngắn điều này ...

Ung dung

var chain = function(n) {
    var str = "D["; // derivative symbol
    for (var i = 1; i <= n; i++) {
        str += "f"+i+"("; // put in n functions, each labeled f1(, f2(, etc.
    }
    str += "x"; // add in the function input, usually "x"
    for (var i = 0; i < n; i++) {
        str += ")"; // add in n end parentheses
    }
    str += "] = "; // add in the end bracket and the equals operator
    for (var i = 1; i <= n; i++) {
        str += "f"+i+"'("; // add in all n of the outer functions with the prime operator
        for (var j = i+1; j <= n; j++) {
            str += "f"+j+"("; // add in all of the inner functions
        }
        str += "x"; // add in the input, "x"
        for (var j = 1; j <= n; j++) {
            str += ")"; // close the parentheses
        }
        if (i !== n) {
            str += " * "; // the multiplication of all of the outer primed functions
        }
    }
    return str;
};

Thay đổi strthành s.
Rò rỉ Nun

Ok, tôi quên thay đổi nó. Lol
Drew Christensen

Đổi for(j=i;j<=n;j++)s+=")";thànhs+=")".repeat(n-i+1);
Leaky Nun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.